我得到以下代表新闻文章的XML:
<content>
Some text blalalala
<h2>Small subtitle</h2>
Some more text blbla
<ul class="list">
<li>List item 1</li>
<li>List item 2</li>
</ul>
<br />
Even more freakin text
</content>
我知道格式并不理想,但现在我必须接受它。
文章应该如下:
我用Jsoup解析这个XML。我可以使用<content>
在doc.ownText()
标记内获取文字,但后来我不知道其他内容(副标题)的位置,我只得到一个大的String
。
为此使用基于事件的解析器会更好吗(我讨厌它们:()还是有可能做doc.getTextUntilTagAppears("tagName")
之类的事情?
编辑:为了澄清,我知道在<content>
下获取元素很热,我的问题是在<content>
内获取文本,每次被元素中断时都会被分解。
我了解到我可以使用.textNodes()
获取内容中的所有文本,效果很好,但是我又不知道我的文章中哪个文本节点属于哪个(一个在h2之前的顶部,另一个在h2之前一个在底部)。
答案 0 :(得分:8)
Jsoup有一个出色的基于选择器的语法。 See here
如果你想要字幕
Document doc = Jsoup.parse("path-to-your-xml"); // get the document node
您知道字幕位于h2
元素
Element subtitle = doc.select("h2").first(); // first h2 element that appears
如果您想要列表:
Elements listItems = doc.select("ul.list > li");
for(Element item: listItems)
System.out.println(item.text()); // print list's items one after another
答案 1 :(得分:3)
我犯的错误是Elements
通过XML,其中不包含TextNodes
。当我按节点逐个查看时,我可以检查Node
是Element
还是TextNode
,这样我就可以相应地对待它们。