4

我得到以下代表新闻文章的 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 之前的顶部,另一个在底部)。

4

2 回答 2

9

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
于 2013-07-11T11:12:02.453 回答
3

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

于 2013-07-11T12:27:50.387 回答