2017-11-15 15 views
0

内のすべてのテキストノードを印刷Jsoup。私はJsoupでこれを解析するため

<html><body><p>A<strong>B</strong>C<strong>D</strong>E</p></body></html> 

は、彼らが表示される順序ですべてのテキスト要素を取得するために(これは、私は全体のWebページを解析することになる簡素化がある)、これは次のようになります。

A B C D E 

私が試した2つのアプローチ:

Elements elements = doc.children().select("*"); 
for (Element el : elements) 
    System.out.println(el.ownText()); 

返します

A C E B D 

これは、「強い」タグ間の要素が最後にあります。

私はまた、再帰バージョン試してみました:

myfunction(doc.children()); 

private void myfunction(Elements elements) { 
    for (Element el : elements){ 
    List<Node> nodos = el.childNodes();  
    for (Node nodo : nodos) {     
     if (nodo instanceof TextNode && !((TextNode) nodo).isBlank()) { 
     System.out.println(((TextNode) nodo).text()); 
    } 
    } 
    myfunction(el.children()); 
} 

をしかし、結果は前と同じです。

これはどのように達成できますか?私は...私はシンプルな困難なものを作っています感じ

答えて

1

方法について:

private static void myfunction(Node element) { 
    for (Node n : element.childNodes()) { 
     if (n instanceof TextNode && !((TextNode) n).isBlank()) { 
      System.out.println(((TextNode) n).text()); 
     } else { 
      myfunction(n); 
     } 
    } 
} 

デモ:

String html = "<html><body><p>A<strong>B</strong>C<strong>D</strong>E</p></body></html>"; 
Document doc = Jsoup.parse(html); 
myfunction(doc.body()); 

出力:

A 
B 
C 
D 
E 
1

text()方法は、トリックを行います例えば以下

public static void main(String[] args) { 
      Document doc = Jsoup.parse("<html><body><p>A<strong>B</strong>C<strong>D</strong>E</p></body></html>"); 
      String texts = doc.body().text(); 
      System.out.println(texts); 
    } 
関連する問題