2017-03-21 1 views
1

Ich verwende htmlUnit auf dieser Seite http://www.my-personaltrainer.it/Foglietti-illustrativi/Torvast.html Es gibt einen Index von Abschnitten und jeder Abschnitt hat eigenen Text. Ich möchte eine Methode erstellen, die den Text zurückgibt, der den Namen des Abschnitts übergibt.HtmlUnit - Holen Sie sich den Text zwischen 2 Tags ohne ID

Alle sections'name sind in einem Tag 'lista' genannt, und ich bekomme diese Informationen auf diese Weise:

HtmlPage page = webClient.getPage("http://www.my-personaltrainer.it/Foglietti-illustrativi/Torvast.html"); 
final String pageAsText = page.asText(); 
     final Iterable<DomElement> div = page.getHtmlElementById("lista").getChildElements(); 
     ArrayList<String> menu = new ArrayList<>(); 
     for (DomElement e : div) { 
      menu.add(e.asText()); 
     } 

Alle Informationen sind in einer Spanne, die ich durchlaufen:

Iterable<DomElement> desc = page.getHtmlElementById("foglietto_descrizioni").getChildElements(); 

Jeder Abschnitt sind innerhalb eines h2-Tags ohne ID oder Klasse. Also ich weiß nicht, wie man den ganzen Text zwischen einem Tag h2 zum anderen extrahiert.

span "foglietto_descrizioni"

Antwort

1

Wenn Elemente Hierarchie ein Muster folgen, können Sie H2 Tag wie das Zugang:

$('#Indicazioni').parent() 

Dann, wenn Sie den ganzen Text in H2 erhalten möchten, können Sie verwenden:

$('#Indicazioni').parent().text() 

Nicht sicher, ob das Ihre Frage beantwortet.

Ich habe HtmlUnit nicht verwendet, aber von dem, was ich sehen kann, hat es Unterstützung für jQuery.

+0

Kannst du die ganze Reihe schreiben? Ich weiß nicht wo die Methode, die du schreibst, steht. Vielen Dank. @Thowk – Fidelis

0

Sie können .getByXPath verwenden, wie im folgenden Beispiel:

try (WebClient webClient = new WebClient()) { 
     HtmlPage page = webClient.getPage("http://www.my-personaltrainer.it/Foglietti-illustrativi/Torvast.html"); 
     HtmlElement span = page.getHtmlElementById("foglietto_descrizioni"); 
     for (Object o : span.getByXPath(".//h2")) { 
      HtmlHeading2 h2 = (HtmlHeading2) o; 
      System.out.println("text 1 = " + h2.getFirstChild().getNextSibling().asText()); 
      System.out.println("text 2 = " + h2.<HtmlElement>getFirstByXPath("./span").asText()); 
     } 
    } 

Beachten Sie, dass . von diesem Knoten bedeutet, bedeutet / Suche Direkt Kinder, während // bedeutet Suche Kinder und Enkelkinder rekursiv,

Verwandte Themen