2013-07-11 49 views
4

我得到以下XML这代表了新闻报道:解析XML与Jsoup

<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
  • 小字幕
  • 与项目
  • 更刻着文字

我解析这个XML与Jsoup名单。我可以在<content>标签中获得doc.ownText()的文本,但是我不知道其他东西(小标题)的放置位置,我只得到一个大的String

它会更好使用基于事件的解析器这个(我恨他们:()还是有可能做这样的事情doc.getTextUntilTagAppears("tagName")

编辑:为了澄清,我知道热,以获得元素<content>下,我的问题是每次当它由一个元素中断时间去内<content>文本,打散。

我才知道,我可以得到内的所有内容文本与.textNodes(),工程巨大,但随后再次我不不知道我的文章中哪个文本节点属于哪个文件(一个在h2之前,另一个在最下面)

+0

你有工作吗? – zEro

回答

3

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

+1

好,它现在为你工作。现在您已经找到了解决方案,请相应更新问题并做出解答。并在符合条件时接受你自己的答案。 – zEro

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 
+0

谁曾慷慨地做过-1可能请解释原因,这样我可以提高自己。 – zEro

+0

@Ascorbin能解决你的问题吗? – zEro

+0

嗨,谢谢你的努力,但我知道如何获得元素。我会尝试指定我的问题。 – FWeigl