Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JDOM通过元素的属性值获取元素?_Java_Xml_Dom_Jdom - Fatal编程技术网

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

Java 如何使用JDOM通过元素的属性值获取元素?,java,xml,dom,jdom,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

我有一个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>

http://www.mywebsite.com/admins?cat=writer
http://www.mywebsite.com/admins?cat=editor
http://www.mywebsite.com/users?cat=critic
http://www.mywebsite.com/users?cat=reviewer
http://www.mywebsite.com/users?cat=reader

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

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());
}
String query=“//*[@name='Critic User']”;
XPathExpression xpe=XPathFactory.instance().compile(查询,Filters.element());
for(元素urle:xpe.evaluate(mydoc))
{
System.out.printf(“此元素的名称为“%s”,文本为“%s”\n”,
urle.getName(),urle.getValue());
}
XPath是一种“不同的野兽”,但它使一些东西(比如这样)更容易编写

上面的“查询”基本上表示:查找文档中具有名为“name”属性的所有元素,name属性的值为“Critic User”

根据口味进行调整,并阅读XPath教程:

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

非常感谢。 我刚刚注意到rolfl在compile方法中颠倒了参数顺序<代码>XPathFactory.instance().compile(查询,过滤器.element()) 而不是
XPathFactory.instance().compile(Filters.element(),query)

但是,做得很好…

如果性能不是问题,那么XPath可能是一个不错的选择。您可以非常有选择性地获取特定元素。但是,即使在所有元素上循环似乎过多,它通常执行得更快。最重要的是,在现实世界的应用程序中,您最终将使用原始XML文件的更多信息。