2016-03-25 11 views
0

てきたHTML:JSOUPは、nextSiblingの後にhtmlを解析する方法は?

私は、コードの変更を解析Text0-3値を得ることができます
<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> 

取得(0)-get(3)が、カントは取得Text4とText5:

値Text4を取得する方法
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()); 

とText5? (4)取得または(5)、今BRを返しますが、私は "1、2、3"

今、私はこのコードを使用します必要があります。

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()); 

     } 

このプリントを:

23 
173 
54 
2 
<br> 
<br> 

私が必要:

23 
173 
54 
2 
one two three 
one two three 

クレイジーコードの答え:

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()); 


     } 

    } 

このクレイジー(?)コードは、私が欲しいものを印刷します。

+0

'node.toString()'は何を印刷しますか? – pczeus

+0

設定されている場合:get(0)、print 23. get(5)を設定した場合、
を印刷します。しかし私は "1 2 3"が必要です – yar1k

+0

あなたは質問を更新したので、それは意味がありません。あなたは当初、要素内のデータを取得しようとしていました。しかし、今ではスパン要素とは関係ないランダムデータを取得しようとしていますが、実際のデータは​​要素内です。多分、あなたが達成しようとしていることだけを記述することができます。 – pczeus

答えて

0

Element param = doc.select("span[class=param]")を実行すると、要素のリストが返されます。 各<span>要素を処理するには、リストを反復処理する必要があります。あなたのコードで はあなただけプリントアウトされます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()); 
} 

上記のコードを実行して、1をつかんされています。これは、あなたが行くどこを取得するのに十分であるべき

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

。がんばろう!

+0

私はそれぞれを使用する場合私はnextSiblingの値を取得する方法を知りません、ノードは要素で動作しません。 – yar1k

+0

ドキュメントdoc = Jsoup.connect( "text.hml")。get(); \t \t \t \t \t params = doc.select( "span [class = param]"); \t \t int i;\t \t for(i = 0; i <6; i ++){ \t \t要素param = params.get(i); \t \t \t \tノードnode = param.nextSibling(); \t \t \t \t System.out.println(node。toString()); \t \t \t \t \t – yar1k

+0

@ yar1kのコメントを読みやすくするためにコメントを更新します。 – pczeus

関連する問題