在以下XML中,我希望能够获取第一个标题标记的内容,而不是第二个。不幸的是,代码打印了两个标题标签的内容......
任何帮助都会非常感谢!
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>
谢谢!
谢谢!
答案 0 :(得分:2)
为什么不使用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
答案 1 :(得分:1)
尝试添加(String tagName ,String parentTagName...
以下)
int numOfParents = ((Element) node).parents().size();
并改变
if (parentTagName.equals("entry"))
到
if (parentTagName.equals("entry") && (numOfParents == 1))