【问题标题】:Jsoup: find elements without id in htmlJsoup:在html中查找没有id的元素
【发布时间】:2012-08-15 09:13:35
【问题描述】:

我是 Jsoup 的新手,我正在尝试解析一个 html 文件以查找所有没有 id 的元素。到现在我只有这个代码sn-p:

            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 处理这个吗?

【问题讨论】:

    标签: java html parsing jsoup


    【解决方案1】:

    我不确定我是否正确理解了您的问题,但我认为您只想选择所有没有 id 属性的元素。如果是这样,这应该工作:

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

    jsoup 网站上有一个full list of selectors

    更新:

    这是一个完整的例子:

    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,排除了Jsoup在解析data字符串中的部分文档时自动添加的&lt;html&gt;&lt;title&gt;&lt;/title&gt;&lt;body&gt; ... &lt;/body&gt;&lt;/html&gt;

    【讨论】:

    • 感谢您的回答,但我想说的是;假设我们有这个代码:
      在我的梦想之外
      [/code] 并且我想从搜索中排除所有结束标记(例如 、、)。我该如何处理。使用组合选择器还是有其他方法?
    • 我不确定我只是不理解你,还是你真的很困惑。结束标签永远不会作为Elements 包含在结果中。您只能在 .toString() 的输出中看到结束标签,以便您可以清楚地看到嵌套。结束标签并不是真正的元素——它们只是表示元素的结束。您可以通过我上面添加的示例中的输出清楚地看到这一点。
    • 非常感谢您的帮助!我开始了解选择器语法。将在接下来的几天里尝试更熟悉它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多