首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Jsoup解析XML

用Jsoup解析XML
EN

Stack Overflow用户
提问于 2013-07-11 10:43:56
回答 2查看 9.4K关注 0票数 4

我得到了以下XML,它表示一篇新闻文章:

代码语言:javascript
复制
<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之前位于顶部,另一个位于底部)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-11 12:27:50

我犯的错误是Elements通过了XML,其中不包括TextNodes。当我按节点进行检查时,我可以检查NodeElement还是TextNode,这样我就可以相应地对待它们。

票数 3
EN

Stack Overflow用户

发布于 2013-07-11 11:12:02

Jsoup有一个非常棒的基于选择器的语法。See here

如果你想要字幕

代码语言:javascript
复制
Document doc = Jsoup.parse("path-to-your-xml"); // get the document node

您知道字幕在h2元素中

代码语言:javascript
复制
Element subtitle = doc.select("h2").first();  // first h2 element that appears

如果你想要的话:

代码语言:javascript
复制
Elements listItems = doc.select("ul.list > li");
for(Element item: listItems)
    System.out.println(item.text());  // print list's items one after another
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17591311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档