我有一个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那样的方法?
答案 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);
干得好......