JSoup按ID提取文本

时间:2019-03-05 07:38:44

标签: java jsoup

我想通过标签内的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");

问题在于,电子邮件的number始终为null,因此我什至无法获取文本,更不用说计算括号中的实际数字了。

我也尝试过:

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

一旦测试用例开始工作,我将使用它从更大的文档中提取文本。

这应该很简单。我想念什么?

2 个答案:

答案 0 :(得分:0)

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

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

请注意,我不仅必须添加,而且还必须添加。仅将头和身体添加到原始测试用例中时,该方法无效。

感谢@soorapadman和@Yaroslav向我指出正确的方向。

答案 1 :(得分:-1)

Jsoup始终遵循层次结构。为了从td标记进行解析,它应该来自table->tr-->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)