2012-09-04 136 views
3

所以我不確定這是否可能。但我想掃描一個XML文檔來查找具有特定屬性值的所有元素。按屬性值搜索元素

元素是什麼或屬性類型是無關緊要的......我只需要根據屬性值來找到它們。

例如我正在尋找單詞「duck」

<person name="Fred" thing="duck"/> 
<person name="Mary"/> 
<animal name="duck" thing="swims"/> 

第一個和第三個應該匹配,第二個不匹配。

任何想法?

非常感謝。

回答

4

如果選擇器可以實現這一點,則不能確定。但也許你可以嘗試這樣的事情:

final String input = "<person name=\"Fred\" thing=\"duck\"/>" 
     + "<person name=\"Mary\"/>" 
     + "<animal name=\"duck\" thing=\"swims\"/>"; 


Document doc = Jsoup.parse(input); 
Elements withAttr = new Elements(); 


for(Element element : doc.getAllElements()) 
{ 
    for(Attribute attribute : element.attributes()) 
    { 
     if(attribute.getValue().equalsIgnoreCase("duck")) 
     { 
      withAttr.add(element); 
     } 
    } 
} 
+0

謝謝,做這項工作。我希望有一種比多次迭代更有效的方法,但是這種方法效果很好,並且沒有任何明顯的長時間。謝謝! – user1389920

+0

是的,也認爲theres更好的解決方案,但不幸的是我沒有找到一個。無論如何...總比沒有好。 – ollo

8

我知道這個答案是事後,但我認爲這將是有用的其他人。有比上面的方法更好的方法:

Elements ducks = doc.select("person[*=duck]"); 

這將返回僅包含值爲「鴨」的屬性的元素。在jsoups網站

有用的作弊sheat:http://jsoup.org/apidocs/org/jsoup/select/Selector.html

+0

(甚至更晚的迴應)看起來你不能在沒有指定名稱的情況下搜索屬性(在網站上試試你的查詢)。此外,海報不僅僅是「人物」標籤。在這種情況下,Ollo的答案似乎仍然是最好的解決方案。 –