使用Jsoup解析XML

时间:2013-07-11 10:43:56

标签: java xml jsoup

我得到以下代表新闻文章的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>

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

文章应该如下:

  • 一些文字blalalala
  • 小字幕
  • 列出项目
  • 更加疯狂的文字

我用Jsoup解析这个XML。我可以使用<content>doc.ownText()标记内获取文字,但后来我不知道其他内容(副标题)的位置,我只得到一个大的String

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

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

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

2 个答案:

答案 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。当我按节点逐个查看时,我可以检查NodeElement还是TextNode,这样我就可以相应地对待它们。