我正在尝试从网上按顺序从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>
我想要做的是创建一个Android布局抓取html,但我需要保留元素的顺序。在这种情况下:
- TextView =&gt;第一文
- TextView =&gt;引用消息
- TextView =&gt;第二篇文字
- ImageView =&gt; IMG
- TextView =&gt;第三文
醇>
当我尝试按顺序获取html值时出现问题,使用JSoup我得到一个带有“First Text Second Text Third Text”的字符串和Element.ownText,最后是img,结果:
- TextView =&gt;第一文本第二文本第三文本
- TextView =&gt;引用消息
- ImageView =&gt; IMG
醇>
如何才能按顺序获取数据?
提前致谢
答案 0 :(得分:0)
答案 1 :(得分:0)
试试这个。
::
Plain old text
输出:
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);
答案 2 :(得分:0)
这个答案有点晚了,但是做你想做的正确方法是这个。对于最外层的<div>
,您可以使用Element.children()
来代替使用Element.childNodes()
来获得子元素。
Element.children()
仅返回子Elements
,其中不包含文本。
Element.childNodes()
返回所有子节点,其中包括TextNodes
和Elements
。
此解决方案对我有用。