【问题标题】:select nodes from a selection of nodes从节点选择中选择节点
【发布时间】:2012-08-08 20:32:46
【问题描述】:

我正在解析一个大型 XML 文件。

我的第一个 selectNodes 语句为我提供了一个我想要解析的所有元素的列表。

对于第一个 selectNodes 语句返回的每个元素,我想运行另一个 selectNodes。

XML 可能如下所示:

<A>
    <B></B>
    <C></C>
</A>
<A>
    <B></B>
    <C></C>
</A>

我受到限制,因为我必须解析内部节点,即“A”的每个子集,一次一个。

最终目标是对每个 B、C 组合做某事,一次一个。

【问题讨论】:

    标签: java xml xpath dom4j


    【解决方案1】:

    在 xPath 中,您可以使用双斜杠 (//) 来查找父节点中具有特定名称的所有节点。如果您希望返回文档中的所有节点,您的表达式可以以“//”开头。

    要返回单独列表中的所有 B 节点和所有 C 节点,请尝试:

    List<?> bNodes = document.selectNodes("//B");
    List<?> cNodes = document.selectNodes("//C");
    
    for (Object b : bNodes)
      for (Object c : cNodes)
        //do something with each b/c combination
    

    或者,要指定要搜索的根节点,请使用:

    List<?> bNodes = document.selectNodes("A//B");
    List<?> cNodes = document.selectNodes("A//C");
    

    使用 SAXReader 读取的文件在哪里。

    【讨论】:

      【解决方案2】:

      您可以提供任何您想要的节点作为 XPath 表达式的上下文。假设您有一个 XPath 表达式来选择 B 节点:

      XPathExpression expr = xpath.compile("./B");
      

      假设您在变量Node aNode 中有A 节点。您可以使用简单的选择 B 元素

      Object result = expr.evaluate(aNode, XPathConstants.NODE);
      

      结果的类型为Node

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-10
        • 2015-10-22
        • 2013-11-18
        相关资源
        最近更新 更多