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 网站上有完整的选择器列表。

更新:

这是一个完整的例子:

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 回答