[英]Get element based on parent in JSoup
在下面的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>
謝謝!
謝謝!
為什么不使用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
嘗試添加(在String tagName ,String parentTagName...
下面String tagName ,String parentTagName...
)
int numOfParents = ((Element) node).parents().size();
和改變
if (parentTagName.equals("entry"))
成
if (parentTagName.equals("entry") && (numOfParents == 1))
?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.