2016-03-21 4 views
0

I Whitelist bin mit wie folgt:jSoup Whitelist Tags, die bestimmten Klassenmustern entsprechen?

  Document doc = Jsoup.parse(urls[0], 5000); 
      if (doc != null){ 

       Whitelist wl = Whitelist.basicWithImages(); 
       // wl.preserveRelativeLinks(false); 
       Cleaner cleaner = new Cleaner(wl); 
       cleanedDoc=cleaner.clean(doc); 
       if (cleanedDoc != null){ 
        whiteListedHtml = cleanedDoc.html(); 
       } 
      } 
     }catch(IOException e){ 
      Log.d(TAG,"exception="+e.getMessage()); 
     } 

Nun dies so schmerzlich nah ist, was Ich mag außer tun würde: Es gibt div-Tags, deren Klasse „nav“ oder „ad“ haben und die füllen Seite mit Rubin. Ich möchte zum Beispiel div-Tags behalten, aber nicht, wenn in der Klasse "nav" oder "ad" erscheint.

Das bin ich über Subklassen Weiße Liste macht denken .... RTFM http://jsoup.org/apidocs/org/jsoup/safety/Whitelist.html Ich sehe addTag() und removeTag() (irgendwie removeTag() nicht verfügbar ist, aber das ist ein anderes Thema). Was ich wirklich tun möchte, ist zu entfernen, wenn und nur wenn die Klasse des Tags bestimmte Werte im Stich wie "Anzeige" oder "nav" enthält. Die einzige Methode, die hoffnungsvoll aussieht, ist:

protected boolean isSafeTag(String tag) 

Test if the supplied tag is allowed by this whitelist 

Parameters: 
    tag - test tag 
Returns: 
    true if allowed 

Wie kann ich für die Prüfung der Klasse Wert dieses Strings herausziehen? Gibt es diese Überprüfung trotzdem, ohne die Whitelist zu unterklassifizieren?

Antwort

0

Eine Sache, die Sie tun können, ist, Tags wie <div class='ad'> manuell zu entfernen. Fügen Sie zunächst die div Tag zu Ihrer weißen Liste (sonst der Reiniger wird sie entfernen)

Whitelist wl = Whitelist 
    .basicWithImages() 
    .addTags("div"); 

Danach wählen Sie alle Elemente, die Sie entfernen möchten, und ... sie einfach entfernen ^^

doc 
    .select("div[class=\"nav\"]") 
    .forEach(e -> e.remove()); 

(Sie können auch Platzhalter verwenden - siehe selector-syntax)

Danach reinigen Sie das Dokument wie Sie es getan haben.

Hinweis: Sie können es auch tun andersherum - sauber zuerst, dann entfernen

Verwandte Themen