2012-09-04 105 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的答案似乎仍然是最好的解决方案。 –