使用 JSoup 解析特定的文本值

Parsing a specific text value with JSoup

嘿,谁知道如何解析“小雨”、“7°C”和“有限”?这些存储为#text,所以这有点让我失望。作为参考,要解析“温度:”,它将是 Element element5 = doc.select("strong").get(3); 谢谢!

您示例中的节点称为 text nodes. In Jsoup, you can read the text nodes of a node by using the text() 方法。因此,对于使用 Jsoup 的示例,我们将 select td 元素,然后使用 text() 获取它的文本值。

但是,这也会从任何子节点输出文本值,因此在您的情况下,这会生成 Weather: Light rain 作为单个字符串。幸运的是,Jsoup 还有一个 ownText() 方法,它只从元素的直接后代(而不是所有子元素)的文本节点中提取值。所以根据你的示例代码,你可以这样写:

Element element5 = doc.select("td").get(3);
String value = element5.ownText()

您可以使用多种方法来提取所需的文本,其中之一是 td.childNode(1).toString(),完整的解决方案如下所述:

   public static void main(String[] args) {


    // Parse HTML String using JSoup library

    String HTMLSTring = "<html>\n" +
            " <head></head>\n" +
            " <body>\n" +
            "  <table class=\"table\"> \n" +
            "   <tbody>\n" +
            "    <tr> \n" +
            "     <td><strong>Weather: </strong>Light Rain</td> \n" +
            "    </tr> \n" +
            "    <tr> \n" +
            "     <td><strong>Tempratue: </strong>70 C</td> \n" +
            "    </tr> \n" +
            "    <tr> \n" +
            "     <td><strong>Visibility: </strong>Limited</td> \n" +
            "    </tr> \n" +
            "    <tr> \n" +
            "     <td><strong>Runs open: </strong>0</td> \n" +
            "    </tr>\n" +
            "   </tbody>\n" +
            "  </table>\n" +
            " </body>\n" +
            "</html>"
            + "<head></head>";

    Document html = Jsoup.parse(HTMLSTring);
    Elements tds = html.getElementsByTag("td");
    for (Element td : tds) {
        //String tdStrongText = td.childNode(0).childNodes().get(0).toString();
        String tdStrongText = td.select("strong").text();
        System.out.print(tdStrongText + " : ");
        String tdText = td.childNode(1).toString();
        System.out.println(tdText);
    }
}

查看 github 上的代码。