繁体   English   中英

使用 jsoup 提取两个(不同的)HTML 标签之间的文本

[英]Extract text between two (different) HTML tags using jsoup

我有以下 HTML 代码片段:

<td>
    <span class="detailh2" style="margin:0px">This month: </span>2 145        
    <span class="detailh2">Total: </span> 31 704          
    <span class="detailh2">Last: </span> 30.12.2021          
</td>

我的目标是提取Total: span之后的代码部分。 这意味着 output 应该如下所示:

31 704

我懂了:

String total = doc.select("td:contains(Total:)").get(0).ownText();

,它返回:

2 145 31 704 30.12.2021

如您所见,所有三个值都合并为一个令人困惑的字符串。 有什么方法(方法?)可以在数组(列表)中返回它们吗?

[“2 145”、“31 704”、“30.12.2021”]

(我实际上不需要数组,我只对Total值感兴趣)

使用Element.nextSibling()方法。 在下面的示例代码中,所需的值被放入 String 的 List 接口中:

String html = "<td>\n"
            + "    <span class=\"detailh2\" style=\"margin:0px\">This month: </span>2 145 \n"
            + "    <span class=\"detailh2\">Total: </span> 31 704                         \n"
            + "    <span class=\"detailh2\">Last: </span> 30.12.2021                      \n"
            + "</td>";

List<String> valuesList = new ArrayList<>();

Document doc = Jsoup.parse(html);
Elements elements = doc.select("span");
for (Element a : elements) {
    Node node = a.nextSibling();
    valuesList.add(node.toString().trim());
}
    
// Display valuesLlist in Condole window:
for (String value : valuesList) {
    System.out.println(value);
}

它将在控制台 Window 中显示以下内容:

2 145
31 704
30.12.2021

如果您希望只获取Total:的值,那么您可以尝试以下操作:

String html = "<td>\n"
            + "    <span class=\"detailh2\" style=\"margin:0px\">This month: </span>2 145 \n"
            + "    <span class=\"detailh2\">Total: </span> 31 704                         \n"
            + "    <span class=\"detailh2\">Last: </span> 30.12.2021                      \n"
            + "</td>";
String totalValue = "N/A";
Document doc = Jsoup.parse(html);
Elements elements = doc.select("span");
for (Element a : elements) {
    if (a.before("</span>").text().contains("Total:")) {
        Node node = a.nextSibling();
        totalValue = "Total: --> " + node.toString().trim();
        break;
    }
}
    
// Display the value in Condole window:
System.out.println(totalValue);

上面的代码将在控制台 Window 中显示以下内容:

 Total: --> 31 704

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM