【问题标题】:XPath for elements at multiple levels?多个级别的元素的 XPath?
【发布时间】:2018-03-05 03:05:40
【问题描述】:

我有以下 XML

<?xml version="1.0" encoding="UTF-8"?>
<stationary>
    <textbook>
        <name>test</name>
    </textbook>
    <notebook>
        <books>
            <name>test</name>
        </books>
    </notebook>
</stationary>

我正在尝试获取所有 name 元素,无论它们在 stationary

中的位置如何

我尝试过使用以下语法,但没有成功:

stationary/*/name/text()

【问题讨论】:

    标签: xpath xpath-2.0


    【解决方案1】:

    试试这个:

    'stationary//name/text()'
    

    【讨论】:

      【解决方案2】:

      只需将以下表达式与相对路径一起使用:

      //name
      

      这似乎捕获了您在 XML 示例中的两个 &lt;name&gt; 标记:

      Element='<name>test</name>'
      Element='<name>test</name>'
      

      【讨论】:

        【解决方案3】:

        您的 XPath,

        /stationary/*/name/text()
        

        只会选择textbook下的name元素中包含的文本节点,因为/*选择了一个child元素,而另一个name元素是一个grandchild 属于stationary,不是它的孩子。

        最简单的更改是将/*/ 替换为//(如 @GillesQuenot,+1),

        /stationary//name/text()
        

        它将沿后代或自我轴选择,因此它将选择孙子,并且您将获得两个 name 元素的 text() 节点。

        请注意,您说您正在尝试获取 name 元素,因此从技术上讲,您应该放弃 text() 步骤,

        /stationary//name
        

        这将选择stationary 元素的所有name 元素后代。然后,作为最后一点,这个 XPath(正如@TimBiegeleisen 提到的,+1),

        //name
        

        将选择文档中的所有name 元素,而不考虑根元素。

        【讨论】:

          猜你喜欢
          • 2018-03-18
          • 2016-12-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-03
          • 2014-03-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多