[英]Getting data in order with Jsoup
我正在尝试从网络中按顺序从 html 获取数据。 Html 代码如下所示:
<div class="text"> First Text <br> <br> <div style="margin:20px; margin-top:5px; "> <table cellpadding="5"> <tbody><tr> <td class="alt2"> <div> Written by <b>excedent</b> </div> <div style="font-style:italic">quote message</div> </td> </tr> </tbody></table> </div>Second Text<br> <br> <img class="img" src="https://developer.android.com/_static/images/android/touchicon-180.png"><br> <br> Third Text </div>
我想做的是创建一个抓取 html 的 Android 布局,但我需要保留元素的顺序。 在这种情况下:
- TextView => 第一个文本
- TextView => 报价信息
- TextView => 第二个文本
- 图像视图 => img
- TextView => 第三个文本
当我尝试按顺序获取 html 值时,问题就出现了,使用 JSoup 我得到一个带有“第一个文本第二个文本第三个文本”的字符串和 Element.ownText,然后是 img 最后,结果:
- TextView => 第一个文本 第二个文本 第三个文本
- TextView => 报价信息
- 图像视图 => img
我该怎么做才能按顺序获取这些数据?
提前致谢
试试这个。
String html = ""
+ "<div class=\"text\">"
+ " First Text"
+ " <br>"
+ " <br>"
+ " <div style=\"margin:20px; margin-top:5px; \">"
+ " <table cellpadding=\"5\">"
+ " <tbody><tr>"
+ " <td class=\"alt2\">"
+ " <div>"
+ " Written by <b>excedent</b>"
+ " </div>"
+ " <div style=\"font-style:italic\">quote message</div>"
+ " </td>"
+ " </tr></tbody>"
+ " </table>"
+ " </div>Second Text<br>"
+ " <br>"
+ " <img class=\"img\" src=\"https://developer.android.com/_static/images/android/touchicon-180.png\"><br>"
+ " <br>"
+ " Third Text"
+ " </div>";
Document doc = Jsoup.parse(html);
List<String> rootTexts = doc.select("div.text").first().textNodes().stream()
.map(node -> node.text().trim())
.filter(s -> !s.isEmpty())
.collect(Collectors.toList());
System.out.println(rootTexts);
输出:
[First Text, Second Text, Third Text]
这个答案有点晚了,但是做你想做的事情的正确方法是这样的。 对于最外面的<div>
,不是使用Element.children()
获取子元素,而是要使用Element.childNodes()
。
Element.children()
只返回子Elements
,其中不包含文本。
Element.childNodes()
返回所有子节点,包括TextNodes
和Elements
。
这个解决方案对我有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.