【发布时间】:2019-10-27 17:28:26
【问题描述】:
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 值,即失败/成功。如果如果是“失败”,那么我需要再次搜索“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);
}
}
但我需要在 java 中使用 jsoup 来完成。我尝试了类似下面的方法
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 jsoup html-parsing