gpt4 book ai didi

java - 在 html 代码的 中搜索特定字符串,如果存在,则使用 JSOUP 打印下一个 值

转载 作者:太空宇宙 更新时间:2023-11-04 09:35:25 24 4
gpt4 key购买 nike

 I have html code like below

<html>
<body>

<div id="1">
<table>
<tr>
<td>ID</td>
<td>:</td>
<td>123</td>
</tr>

<tr>
<td>Status</td>
<td>:</td>
<td>Fail</td>
</tr>
</table>
</div>
<div id="2">
<table>
<tr>
<td>ID</td>
<td>:</td>
<td>456</td>
</tr>

<tr>
<td>Status</td>
<td>:</td>
<td>Success</td>
</tr>
</table>
</div>
<div id="3">
<table>
<tr>
<td>ID</td>
<td>:</td>
<td>789</td>
</tr>

<tr>
<td>Status</td>
<td>:</td>
<td>Fail</td>
</tr>
</table>
</div>
<div id="4">
<table>
<tr>
<td>ID</td>
<td>:</td>
<td>135</td>
</tr>

<tr>
<td>Status</td>
<td>:</td>
<td>Success</td>
</tr>
</table>
</div>

</body>
</html>

我需要解析这段 HTML 代码。我需要迭代所有存在的 div 标签,并迭代地在每个 div 的 td 中搜索“搜索”。如果存在,则获取其第二个相邻 td 值,即失败/成功。如果 If 是“失败”,那么我需要再次搜索“ID”,如果存在,我需要打印其第二个相邻的 div 值,即本例中的 123 和 789。

伪代码可能如下所示

if(code contains "Status")
{
1. Get its 2nd td value i.e., Fail/Success

if(td value is "Fail")
{
1. Search for "ID"
if("ID" present)
{
Print the number/2nd adjacent <td> value
}
}
}

我在 javascript 中尝试过类似下面的内容

var t0=$(this).find('tr:has(td:contains("Test Status"))');
if (t0.length)
{
var str0 =t0.text().trim();
str0 = /:(.+)/.exec(str0)[1];

if(str0 == "FAIL")
{

var t1=$(this).find('tr:has(td:contains("Test ID"))');
if (t1.length)
{
str =t1.text().trim();
str = /:(.+)/.exec(str)[1];
testIDArray.push(str);
// alert(str);
}
}

但我需要使用 jsoup 在 java 中执行此操作。我尝试了如下的方法

String htmlString = fileContent;
Document document = Jsoup.parse(htmlString);
Elements elements = document.body().select("div"); for (Element element : elements) { String link = element.select("td:contains(Test Status)").attr("<tr>");

if(link != null || !(link.isEmpty()))
{
System.out.println(link);
System.out.println("=========================");
}
}

请帮我解决这个问题。我不知道如何继续。

提前致谢。

请帮我解决这个问题。

最佳答案

您可以使用 Java Streams 来解决这个问题:

List<String> failedIds = document.body().select("div table").stream()
.map(e -> e.select("tr"))
.filter(trs -> "FAIL".equalsIgnoreCase(trs.last().select("td").last().text()))
.map(trs -> trs.first().select("td").last().text())
.collect(Collectors.toList());

结果将是:

[123, 789]

首先选择div table以获取所有元素。然后,选择所有 tr 并过滤状态为 Fail 的那些 (trs -> trs.first().select("td").last().text())。最后映射 ID (trs -> trs.first().select("td").last().text())。

要打印 ids 而不是创建列表,您可以使用 .forEach():

document.body().select("div table").stream()
.map(e -> e.select("tr"))
.filter(trs -> "FAIL".equalsIgnoreCase(trs.last().select("td").last().text()))
.map(trs -> trs.first().select("td").last().text())
.forEach(System.out::println);

或者您可以使用它(没有流):

for (Element e : document.body().select("div table")) {
Elements trs = e.select("tr");
if ("FAIL".equalsIgnoreCase(trs.last().select("td").last().text())) {
String id = trs.first().select("td").last().text();
System.out.println(id);
}
}

关于java - 在 html 代码的 <td> 中搜索特定字符串,如果存在,则使用 JSOUP 打印下一个 <td> 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56575078/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com