java - jsoup 取标签数据
问题描述
我正在尝试以下代码,并且我期望 menuList 有一些节点的结果。但是 menuList 没有任何节点。这是为什么?
public static void main(String[] args) {
String connUrl = "http://www.hstree.org/c03/c03_00.php";
try {
Document doc = Jsoup.connect(connUrl).get();
Elements elements = doc.select("table");
for (Element element : elements) {
// System.out.println(element.attributes());
if (element != null && (element.id().equals("1gn") || element.id().equals("2gn"))) {
Node childNode = element.childNodes().get(0);
List<Node> menuList = childNode.childNodes();
System.out.println(element.id()+" menu");
for(Node menu : menuList) {
System.out.println(menu.childNodes().get(0).toString());
System.out.println(" : " + menu.childNodes().get(1).toString());
}
System.out.println();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
解决方案
childNodes
返回包括文本在内的所有内容。您需要使用children()
和Element
:
String connUrl = "http://www.hstree.org/c03/c03_00.php";
try {
Document doc = Jsoup.connect(connUrl).get();
Elements elements = doc.select("table");
for (Element element : elements) {
// System.out.println(element.attributes());
if (element != null && (element.id().equals("1gn") || element.id().equals("2gn"))) {
Element childNode = element.child(0);
List<Element> menuList = childNode.children();
System.out.println(element.id() + " menu");
for (Element menu : menuList) {
System.out.println(menu.child(0));
System.out.println(" : " + menu.child(1));
}
System.out.println();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
推荐阅读
- python - 更改继承类的静态变量
- jquery - 使用服务器端处理数据表jquery导出表的所有数据
- spring-boot - 向“@WebMvcTest”添加一个额外的 bean
- javascript - jQuery DataTables 功能不可用
- bash - 如何卷曲以从重定向链接中提取有效的 .zip 文件
- xml-parsing - XMLSerializer 在开玩笑测试中未定义
- python - 我应该使用哪种神经网络从 RDF 规则的句子中提取关键信息?
- node.js - 如何通过 socks5 代理进行网络连接?
- javascript - 如何在 React 函数中创建复选框
- angular - 在 Angular 7 中使用 Jest 进行测试时缺少 Kendo Intl Service 的语言环境信息