gpt4 book ai didi

java - 如何使用 jsoup 定位直接放置在 tr-tag 中的 div-tag

转载 作者:行者123 更新时间:2023-12-01 16:16:31 24 4
gpt4 key购买 nike

这是问题场景

<html>
<body>
<div class="specalClass">
<table>
<tbody id="mainTable">
<tr><td>data 1</td></tr>
<tr><div>Data</div></tr>
</tbody>
</table>
</div>
</body>
</html>

有个问题,如何获取直接放在tr标签中的div,所有元素都是可追踪的,除了这个div。这只是一个示例代码:我们不能直接使用 XPath 或 div-tag,因为真正的页面很大。我们可以通过它的id来获取这个表,然后需要迭代它。

最佳答案

您可以使用 CSS 选择器获取 div,它是 ID 为 mainTable 的表中 tr 的直接子级:

    doc.select("#mainTable tr>div");

但是它不起作用,因为我们这里还有另一个问题。
tr 中不允许使用 div,因此 Jsoup 的 HTML 解析器将其删除,因为它遵循标准。要跳过 HTML 验证,您应该使用 XML 解析器解析文档:

    Document doc = Jsoup.parse(html, "", Parser.xmlParser());

它将保留原始结构,现在 div 将可访问。

编辑:
为了反驳发布无效答案的指控,我将整个代码与 HTML 和 XML 解析器的输出一起粘贴。
第一个示例不起作用,但根据我的回答,第二个示例工作正常:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.parser.Parser;

public class Stackoverflow62376512 {

public static void main(final String[] args) {
String html = "<html>\n" +
" <body>\n" +
" <div class=\"specalClass\">\n" +
" <table>\n" +
" <tbody id=\"mainTable\">\n" +
" <tr><td>data 1</td></tr>\n" +
" <tr><div>Data</div></tr>\n" +
" </tbody>\n" +
" </table>\n" +
" </div>\n" +
" </body>\n" +
"</html>";

Document doc = Jsoup.parse(html, "", Parser.htmlParser()); // same as Jsoup.parse(html);
System.out.println("Document parsed with HTML parser (div inside tr will be dropped): " + doc);
System.out.println("Selecting div (this will fail and show null): " + doc.select("#mainTable tr>div").first());

System.out.println("\n-------------\n");

doc = Jsoup.parse(html, "", Parser.xmlParser());
System.out.println("Document parsed with XML parser (div inside tr will be kept): " + doc);
System.out.println("Selecting div (this one will succeed): " + doc.select("#mainTable tr>div").first());

}
}

输出是:

Document parsed with HTML parser (div inside tr will be dropped): <html>
<head></head>
<body>
<div class="specalClass">
<div>
Data
</div>
<table>
<tbody id="mainTable">
<tr>
<td>data 1</td>
</tr>
<tr></tr>
</tbody>
</table>
</div>
</body>
</html>
Selecting div (this will fail and show null): null

-------------

Document parsed with XML parser (div inside tr will be kept): <html>
<body>
<div class="specalClass">
<table>
<tbody id="mainTable">
<tr>
<td>data 1</td>
</tr>
<tr>
<div>
Data
</div>
</tr>
</tbody>
</table>
</div>
</body>
</html>
Selecting div (this one will succeed): <div>
Data
</div>

关于java - 如何使用 jsoup 定位直接放置在 tr-tag 中的 div-tag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62376512/

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