【问题标题】:JSoup Extract Text by idJSoup 按 id 提取文本
【发布时间】:2019-07-26 14:45:41
【问题描述】:

我想通过包含在标签中的 id 提取文本“Inbox (100)”html。我的测试用例如下所示:

    String html = "<td id=\"e-mailoutline-row\" title=\"Inbox\" class=\"outline-text\">Inbox (100)</td>";

    Document doc = Jsoup.parse(html);
    Element numberofEmails = doc.getElementById("e-mailoutline-row");

问题是 numberofEmails 始终为空,所以我什至无法获取文本,更不用说计算括号中的实际数字了。

我也试过了:

        String html = "<head><body><td id=\"e-mailoutline-row\" title=\"Inbox\" class=\"outline-text\">Inbox (100)</td></body?</head>";

一旦我得到测试用例,我将使用它从更大的文档中提取此文本。

这应该很简单。我错过了什么?

【问题讨论】:

  • 可能缺少头部和身体,而您试图解析为文档,jsoup 中有一种方法可以处理片段。
  • @Yaroslav 所以看起来头部和身体都不见了,但我确实尝试过。
  • 并不是要发布链接作为答案 - jsoup.org/cookbook/input/parse-body-fragment

标签: java jsoup


【解决方案1】:

命令的语法是正确的,但 JSoup 似乎对正确形成的 html 很挑剔。以下 html 测试用例完全按预期工作:

String html = "<head><body><table><tr><td id=\"e-mailoutline-row\">Inbox (100)</td></tr></table></body></head>";

请注意,我不仅要添加 and,而且还要添加 and too。它不适用于仅添加到原始测试用例的头部和身体。

感谢@soorapadman 和@Yaroslav 为我指明了正确的方向。

【讨论】:

    【解决方案2】:

    Jsoup 始终遵循层次结构。为了从td标签解析它应该来自table-&gt;tr--&gt;td

     String html = "<head><body><table><tr><td id=\"e-mailoutline-row\">Inbox (100)</td></tr></table></body></head>";
        Document doc = Jsoup.parse(html);
        Element numberofEmails = doc.getElementById("e-mailoutline-row");
        System.out.println(numberofEmails.text());
    

    输出:

    Inbox (100)
    

    【讨论】:

    • @soorapagman 我应该提到这个测试用例最终将用于从更大的 html 文档中提取该字符串,所以我不想要所有 doc.text - 因此通过 id 提取
    • 我想是的。它应该来自 Table ->tr-->td 如果你可以分享至少我可以帮助你的层次结构
    • 糟糕,没有正当理由投反对票?怎么了?
    猜你喜欢
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    相关资源
    最近更新 更多