0

私はJsoupを初めて使用し、htmlファイルを解析してIDのないすべての要素を見つけようとしています。今まで私はこのコードスニペットしか持っていません:

            Document doc = Jsoup.parse(input, null);
        for (Element el : doc.getAllElements()) {
            hasId = el.hasAttr("id");
            if (!hasId) {
                idList.add(el.tagName());
            } else {
                log.info("id:" + el.attr("id"));
            }
        }

IDを持つ要素は正しく検出されます。私の問題は、開始要素がIDを持っている場合にのみスキャンしたいということです。Jsoupでこれを処理できますか?

4

1 に答える 1

3

あなたの質問を正しく理解しているかどうかはわかりませんが、id属性を持たないすべての要素を選択したいだけだと思います。もしそうなら、これはうまくいくはずです:

doc.select("*:not([id])")

jsoupのWebサイトにセレクターの完全なリストがあります。

アップデート:

完全な例を次に示します。

import org.jsoup.Jsoup;
import org.jsoup.nodes.*;

public class Soup {
  public static void main(String[] args) {
    String data = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"> <tr> <td class=\"reportheader\" align=\"left\" nowrap width=\"720\">Outside my Dreams</td> </tr> </table>";
    Document doc = Jsoup.parse(data);
    StringBuilder tags = new StringBuilder();
    for (Element el : doc.select("body *:not([id])")) {
      tags.append(el.tagName());
      tags.append(' ');
    }
    System.out.println(tags);
  }
}

上記を私のマシンで実行すると、次の出力が得られます。table tbody tr td

クエリを少し変更したことに注意してください"body *:not([id])"body前面に追加すると、文字列<html><title></title><body> ... </body></html>内の部分的なドキュメントを解析するときにJsoupが自動的に追加するものが除外されdataます。

于 2012-08-15T09:24:28.357 に答える