【问题标题】:How to get an element by the value of its attribute using JDOM?如何使用 JDOM 通过其属性的值获取元素?
【发布时间】:2012-10-04 21:53:03
【问题描述】:

我有一个类似以下的 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 的方法?

【问题讨论】:

    标签: java xml dom jdom


    【解决方案1】:

    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 是一个“不同的野兽”,但它使一些东西(像这样)变得更容易编写。

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

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

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

    【讨论】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多