多层级元素的XPath是什么?

6

I have a following 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个回答

6
试试这个:
'stationary//name/text()'

3

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

//name

这似乎捕捉到了你的XML示例中的两个<name>标签:
Element='<name>test</name>'
Element='<name>test</name>'

3
你的XPath:
/stationary/*/name/text()

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

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

/stationary//name/text()

这个查询会沿着后代或自身的轴选择,所以它会选择孙子节点,并且您将获取两个 name 元素的 text() 节点。

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

/stationary//name

这将选择所有stationary元素的name元素后代。最后,注意此XPath(由@TimBiegeleisen提到,+1)。

//name

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接