0

Web ページの本文にあるすべての html タグを調べて、テキストが含まれているかどうかを確認しようとしています。もしそうなら、私はそのテキストの印刷を希望します:

  Document doc = Jsoup.connect(site).get();     
    Elements e = doc.body().getAllElements();
      for (int i=0; i<e.size(); i++){
         if(doc.body().child(i).hasText()){
        System.out.println(doc.body().child(i).text());
          }
       }

上記は機能しますが、私が望む方法ではありません。child() メソッドは、複数の 'div クラス' 要素をまとめているため、きめの細かいものではないようです。DOM 本体をよりきめ細かくトラバースして、すべてのタグのテキストが何であるかを確認するにはどうすればよいですか?

前もって感謝します。

4

2 に答える 2

1
    Document doc = Jsoup.connect(site).get();
    doc.body().traverse(new NodeVisitor() {

        @Override
        public void head(Node node, int depth) {
            if (node instanceof TextNode) {
                TextNode tn = ((TextNode) node);
                // Try to improve this filter for the nodes who contain
                // texts with a whitespaces
                if (tn.text().replaceAll("\\s*", "").length() > 0) {
                    System.out.println("Tag:" + tn.parent().nodeName()
                            + ", text:" + tn.text());
                }
            }
        }

        @Override
        public void tail(Node node, int depth) {
            // Do Nothing
        }
    });
于 2012-04-26T14:49:12.603 に答える
1

このアプローチを使用できます

トラバース内では、現在のノードが TextNode であるかどうかを確認できます。

if(node intanceof TextNode) {
  System.out.println(node.text());
}

すべてのテキストを印刷しようとしている場合。なぜクラスtext()から使用しないのですか?Elements

于 2012-04-26T14:09:43.840 に答える