多级元素的XPath?

问题描述 投票:2回答:3

我有一个以下的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
3个回答
3
投票

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

//name

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

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

2
投票

试试这个 :

'stationary//name/text()'

2
投票

你的XPath,

/stationary/*/name/text()

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

最简单的变化是用/*/取代//(如@GillesQuenot所提到的,+ 1),

/stationary//name/text()

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

请注意,你说你正试图获得name元素,所以从技术上讲,你应该放弃text()步骤,

/stationary//name

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

//name

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

© www.soinside.com 2019 - 2024. All rights reserved.