5

我有一个类似以下的 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 库通过其“名称”属性的值来选择“url”元素?是否有任何直接的方法,或者我必须选择所有子元素并使用“for”循环检查所需的元素?有没有像.Net中的Linq这样的方法?

4

2 回答 2

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[@name='Critic User']

于 2012-10-14T22:19:49.777 回答
0

非常感谢。我刚刚注意到 rolfl 在 compile 方法中颠倒了参数顺序。XPathFactory.instance().compile(query, Filters.element()); 然而,而不是XPathFactory.instance().compile(Filters.element(), query); 好工作......

于 2013-05-09T17:35:15.820 回答