2016-03-25 5 views
0

Have:Wie JSOUP HTML nach dem nextSibling analysieren? HTML

<table width="100%" cellpadding="0" cellspacing="0" border="0"> 
    <tr> 
    <td width="27%" align="left" valign="top"> 
    <span class="param">Text0</span> 23<br /> 
    <span class="param">Text1</span> 173<br /> 
    <span class="param">Text2</span> 54<br /> 
    <span class="param">Text3</span> 2<br /><br /> 
    </td> 
    <td width="27%" align="left" valign="top"> 
    <span class="param">Text4</span><br /> 
    one <br /> 
    two <br /> 
    three <br /> 
    </td> 
    <td width="46%" align="left" valign="top"> 
    <span class="param">Text5</span><br /> 
    one -<br /> 
    two -<br /> 
    three -<br /> 
    </td> 
    </tr> 
    </table> 

Ich kann Wert erhalten Text0-3 Codeänderung analysieren erhalten (0) -get (3), aber kann nicht Text4 und Text5 erhalten:

Document doc = Jsoup.connect("text.html").get(); 

Element param = doc.select("span[class=param]").get(0); 

Node node = param.nextSibling(); 

System.out.println(node.toString()); 

Wie Wert Text4 erhalten und Text5? erhalten (4) oder erhalten (5), jetzt br zurückkehren, aber ich brauche zu bekommen "eins, zwei, drei"

Jetzt benutze ich diesen Code:

Document doc = Jsoup.connect("text.hml").get(); 

     Elements params = doc.select("span[class=param]"); 
     int i; 
     for (i=0; i<6; i++) { 
     Element param = params.get(i); 

     Node node = param.nextSibling(); 

     System.out.println(node.toString()); 

     } 

dieser Druck:

23 
173 
54 
2 
<br> 
<br> 

ich brauche:

23 
173 
54 
2 
one two three 
one two three 

Verrücktes Code Antwort:

Document doc = Jsoup.connect("text.html").get(); 

     Elements params = doc.select("span[class=param]"); 
     int i; 
     for (i=0; i<3; i++) { 
     Element param = params.get(i); 

     Node node = param.nextSibling(); 

     System.out.println(node.toString()); 
     } 

     for (i=4; i<5; i++){ 

      Element apar = params.get(i); 

      Node apan = apar.nextSibling(); 

      System.out.println("apar: "+apan.nextSibling().toString()); 
      System.out.println("apar: "+apan.nextSibling().nextSibling().nextSibling().toString()); 
      System.out.println("apar: "+apan.nextSibling().nextSibling().nextSibling().nextSibling().nextSibling().toString()); 
      //System.out.println(apan.nextSibling().toString()); 


     } 
     for (i=5; i<6; i++){ 

      Element vih = params.get(i); 

      Node vihn = vih.nextSibling(); 

      System.out.println("vih: "+vihn.nextSibling().toString()); 
      System.out.println("vih: "+vihn.nextSibling().nextSibling().nextSibling().toString()); 
      System.out.println("vih: "+vihn.nextSibling().nextSibling().nextSibling().nextSibling().nextSibling().toString()); 
      //System.out.println(apan.nextSibling().toString()); 


     } 

    } 

dieser verrückte (?) Code druckt was ich will.

+0

Was wird mit 'node.toString()' gedruckt? – pczeus

+0

wenn gesetzt: get (0), drucke 23. Wenn set (5) gesetzt ist, drucke
. aber ich brauche "eins zwei drei" – yar1k

+0

Nun, da Sie die Frage aktualisiert haben, macht es weniger Sinn. Sie suchten zunächst nach den Daten innerhalb der Elemente. Aber jetzt versuchen Sie, zufällige Daten zu erhalten, die nichts mit den Span-Elementen zu tun haben, sondern tatsächliche Daten innerhalb der Elemente sind. Vielleicht kannst du einfach beschreiben, was du zu erreichen versuchst. – pczeus

Antwort

0

Wenn Sie eine Element param = doc.select("span[class=param]") tun, erhalten Sie eine Liste der Elemente zurück. Sie müssen über die Liste iterieren, um jedes <span> Element zu verarbeiten. In Ihrem Code Sie nur greifen, indem Sie einen druckt aus Element param = doc.select("span[class=param]").get(0);

Document doc = Jsoup.connect("text.hml").get(); 
Elements params = doc.select("span[class=param]"); 
for(Element element: params){ 
    //Will print out the text contained within the <span>...</span> 
    System.out.println(element.ownText()); 
} 

params = doc.select("td"); 
for(Element element: params){ 
    //Will print out the text contained in all children nodes of <td> nodes, that are text nodes 
    System.out.println(element.ownText()); 
    //System.out.println(element.text()); 
} 

Der obige Code tun:

Text0 
Text1 
Text2 
Text3 
Text4 
Text5 
23 173 54 2 
one two three 
one - two - three - 

genug sein, um zu bekommen Dies sollten Sie, wohin Sie gehen. Viel Glück!

+0

wenn ich jede verwende ich weiß nicht, wie nextSibling Wert, Knoten nicht mit Elementen arbeiten. – yar1k

+0

Dokument doc = Jsoup.connect ("text.hml"). Get(); \t \t \t \t Elemente params = doc.select ("span [class = param]"); \t \t int i; \t \t für (i = 0; i <6; i ++) { \t \t Element param = params.get (i); \t \t \t \t Knoten node = param.nextSibling(); \t \t \t \t System.out.println (Knoten.toString()); \t \t \t \t \t} – yar1k

+0

Ich werde die Antwort mit @ yar1k Kommentar aktualisieren, um sie besser lesbar. – pczeus