使用Jsoup解析XML

我得到以下代表新闻文章的XML:

 Some text blalalala 

Small subtitle

Some more text blbla
  • List item 1
  • List item 2

Even more freakin text

我知道格式不理想,但现在我必须接受它。

文章应该如下:

  • 一些文字blalalala
  • 小副标题
  • 列出项目
  • 甚至更奇怪的文字

我用Jsoup解析这个XML。 我可以使用doc.ownText()获取标签内的文本,但后来我不知道其他东西(副标题)放在哪里,我只得到一个大String

为此使用基于事件的解析器会更好(我讨厌它们:()还是有可能做像doc.getTextUntilTagAppears("tagName")这样的事情?

编辑:为了澄清,我知道在下获取元素很热,我的问题是在获取文本,每次被元素中断时都会被分解。

我了解到我可以使用.textNodes()获取内容中的所有文本,效果很好,但是我再次知道我的文章中哪个文本节点属于哪一个(一个位于h2之前的顶部,另一个位于底部) )。

Jsoup有一个出色的基于选择器的语法。 看这里

如果你想要副标题

 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 

我犯的错误是通过Elements的XML,不包括TextNodes 。 当我逐个节点地浏览它时,我可以检查NodeElement还是TextNode ,这样我就可以相应地对待它们。