[英]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.