2016-08-17 2 views
0

Ich arbeite an einem Projekt und ich bin nur am Seitenlayout und nicht im Text interessiert. Ich habe momentan Probleme, jedes Element auf Textebene loszuwerden. zum Beispiel:Wie alle Elemente auf Textebene mit Jsoup entfernen?

<div> 
    <ul> 
     <li>some menu item</li> 
     <li>some menu item</li> 
     <li>some menu item</li> 
    </ul> 
</div> 
<div> 
    <h3>Tile of some text</h3> 
    <p></p> 
    <p>some text</p> 
    <ul> 
     <li>some other text</li> 
     <li>some other text</li> 
     <li>some other text</li> 
    </ul> 
</div> 

ich loswerden die ul, li, p und h3 Elemente auf Textebene zu bekommen, aber die div und die Liste mit Menüpunkten halten, wie dieser Teil des Layouts der Seite ist . Wie mache ich das mit Jsoup?

Ich habe versucht, dies mit den document.select() und dann .remove() die Elemente zu tun, aber die Select-Funktion ist nicht für solche nicht standardmäßige Abfragen gemacht.

EDIT: Das Endergebnis ich zu bekommen ist:

<div> 
    <ul> 
     <li>some menu item</li> 
     <li>some menu item</li> 
     <li>some menu item</li> 
    </ul> 
</div> 
<div> 

</div> 

Wie Sie sehen können sie entfernt die Liste, wenn die ul-Tag auf der gleichen Ebene wie die Tags mit Text in ihnen ist. Das ul-Tag ist Teil des Textes auf der Seite und hat nichts mit dem Layout der Seite zu tun. Das ul-Tag mit Menüelementen ist wichtig für die Seite, da dies definiert, dass dort ein Menü vorhanden ist und es 3 verschiedene Elemente hat.

+0

Können Sie bitte ein Beispiel dafür geben, wie die html wie, nach der Änderung aussehen sollte? – CanB

Antwort

0

Ich fand zuerst die Tags, die ich loswerden möchte, und dann leer() auf ihren Eltern aufgerufen.

public static void main(String[] args) { 
     String html = "<div> <ul> <li>some menu item</li> <li>some menu item</li> <li>some menu item</li> </ul></div><div> <h3>Tile of some text</h3> <p></p> <p>some text</p> <ul> <li>some other text</li> <li>some other text</li> <li>some other text</li> </ul></div>"; 
     Document doc = Jsoup.parse(html.toString()); 
     Elements elements = doc.body().select("*"); 
     for (Element element : elements) { 
      if ("h3".equals(element.tagName()) || "p".equals(element.tagName())) { 
       element.parent().empty(); 
      } 
     } 
     System.out.println(doc.toString()); 
    } 
+0

OK, überprüfe meine bearbeitete Antwort. – CanB

+0

Gibt es eine sauberere Art, die Elemente nach Text zu durchsuchen? Ich mag das Aussehen all dieser Tag-Namen in meiner if-Anweisung nicht. – k0enf0rNL

0

Sie können wählen, und entfernen Sie alle p, li und ul Elemente mit Standard:

for (Element element : doc.select("p")) { 
    element.remove(); 
} 
Verwandte Themen