如何使用JDOM通过其属性的值获取元素?

时间:2012-10-14 21:51:04

标签: java xml dom jdom

我有一个xml文件,如下所示:

<?xml version="1.0" encoding="UTF-8" ?>
<config>
   <admins>
       <url name="Writer Admin">http://www.mywebsite.com/admins?cat=writer</url>
       <url name="Editor Admin">http://www.mywebsite.com/admins?cat=editor</url>
   </admins>
   <users>
      <url name="Critic User">http://www.mywebsite.com/users?cat=critic</url>
      <url name="Reviewer User">http://www.mywebsite.com/users?cat=reviewer</url>
      <url name="Reader User">http://www.mywebsite.com/users?cat=reader</url>
   </users>
</config>

如何使用java中的JDOM库按“name”属性的值选择“url”元素?是否有任何简单的方法或我必须选择所有子元素并使用“for”循环检查所需的元素?有没有像.Net中的Linq那样的方法?

2 个答案:

答案 0 :(得分:5)

XPath是你的朋友......如果你使用的是JDOM 2.x它比JDOM 1.x更容易,那么,在JDOM 2.x中它会是这样的:

String query = "//*[@name= 'Critic User']";
XPathExpression<Element> xpe = XPathFactory.instance().compile(query, Filters.element());
for (Element urle : xpe.evaluate(mydoc)) 
{
    System.out.printf("This Element has name '%s' and text '%s'\n",
          urle.getName(), urle.getValue());
}

XPath是一个'不同的野兽',但是它会产生一些东西(比如这个),更容易编写。

上面的'查询'基本上说:查找文档中所有具有名称'name'的元素,name属性的值为'Critic User'。

调整品味,并阅读XPath教程:http://www.w3schools.com/xpath/default.asp

编辑:当然,更好的查询是:// url [@ name ='Critic User']

答案 1 :(得分:0)

非常感谢。 我只是注意到rolfl在编译方法中反转了参数顺序。 XPathFactory.instance().compile(query, Filters.element()); 而不是XPathFactory.instance().compile(Filters.element(), query); 干得好......