2012-10-14 87 views
5

我有一个xml文件类似以下:如何通过使用JDOM的属性值获取元素?

<?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> 

如何可以选择通过他们的“名字”价值“URL”元素用JDOM库在java中的属性?有没有直接的方法,或者我必须选择所有的子元素,并使用“for”循环检查所需的元素?在.Net中有没有像Linq这样的方法?

回答

5

XPath是你的朋友......如果你正在使用JDOM 2.X它比JDOM 1.x的更容易,因此,INT 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 [@名称= '用户批评家']

+1

如果性能不是问题,那么XPath可能就是要走的路。您可以非常有选择性地抓取特定元素但即使遍历所有元素可能看起来过多,它通常执行得更快。最重要的是,在真实世界的应用程序中,无论如何您最终都会使用原始XML文件的更多信息。 –

+0

感谢您的时间和考虑。 :-) – moorara

0

感谢很多关于那。 我只注意到rolfl反编译方法中的参数顺序。 XPathFactory.instance().compile(query, Filters.element()); 而不是XPathFactory.instance().compile(Filters.element(), query); 不错,但是...

相关问题