在下面的XML中,我希望能够获得第一个title标签而不是第二个title标签的内容。不幸的是,代码同时打印了两个标题标签的内容。
任何帮助将非常感谢!
String feedXMLString = "<entry><title>title 1</title><source><title>title 2</title></source></entry>";
Document feedXML = Jsoup.parse(feedXMLString);
NodeTraversor feedXMLTraversor = new NodeTraversor(new NodeVisitor() {
@Override
public void tail(Node node, int depth) {
if (node instanceof Element) {
String tagName = ((Element) node).tagName();
String parentTagName = ((Element) node).parent().tagName();
if (tagName.equals("title")) {
if (parentTagName.equals("entry")) {
String title = ((Element) node).ownText();
System.out.println(title);
}
}
}
}
@Override
public void head(Node node, int depth) {
}
});
feedXMLTraversor.traverse(feedXML.body());
输出为
title 1
title 2
我只希望它是标题1。我假设第二个标题的父标签是
<source>
,但是出于某种原因,JSoup似乎认为它是<entry>
。谢谢!
谢谢!
最佳答案
为什么不使用Jsoup API的选择器部分?它使用起来更简单,更清洁,我敢打赌它也更快。我个人使用的是:
//The line you already had
Document doc = Jsoup.parse(feedXMLString);
//This will get you all the titles
Elements elems = doc.select("title");
//And now you can proceed in various ways:
String title1stWay = elems.first().text();
String title2ndWay = elems.get(0).text();
在这里看看:Jsoup Selector API
关于java - 在JSoup中获取基于父元素的元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10891730/