多级元素的XPath?

时间:2018-03-05 03:05:40

标签: xpath xpath-2.0

我有以下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()

3 个答案:

答案 0 :(得分:3)

只需使用以下表达式和相对路径:

//name

这似乎捕获了XML示例中的两个<name>标记:

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

答案 1 :(得分:2)

试试这个:

'stationary//name/text()'

答案 2 :(得分:2)

您的XPath,

/stationary/*/name/text()

只会选择nametextbook元素中包含的文本节点,因为/*会选择元素,而另一个name element是stationary孙子,而不是它的孩子。

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

/stationary//name/text()

将沿着后轴或自身轴进行选择,因此它将选择孙子,并且您将获得两个name元素'text()个节点。

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

/stationary//name

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

//name

将选择文档中的所有name元素,无论根元素如何。

相关问题