使用Jsoup解析XML

4
我将会翻译以下XML代码,该代码代表一篇新闻文章:

我得到了以下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。我可以使用 doc.ownText() 获取<content>标记内的文本,但是我不知道其他内容(副标题)放在哪里,我只得到一个大的 String

是否最好使用基于事件的解析器?(我讨厌他们:()或者有没有可能做像doc.getTextUntilTagAppears("tagName")这样的操作?

编辑:为了澄清,我知道如何获取<content>下的元素,我的问题是如何获取<content>内的文本,并在被元素中断时进行分割。

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

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

请问谁曾经慷慨地给了我-1,能否解释一下原因,这样我就可以改进自己。 - zEro
嗨,感谢你的努力,但是我知道如何获取元素。我会尝试明确我的问题。 - fweigl

3

我犯的错误是通过Elements遍历XML,而这并不包括TextNodes。当我逐个节点遍历时,可以检查NodeElement还是TextNode,这样我就可以相应地处理它们。


1
很好,现在它对你起作用了。既然你已经找到了解决方案,请相应地更新问题和答案。并在符合条件时接受你自己的答案。 - zEro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接