使用 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 上的代码。
嘿,谁知道如何解析“小雨”、“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 上的代码。