我有以下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()
答案 0 :(得分:3)
只需使用以下表达式和相对路径:
//name
这似乎捕获了XML示例中的两个<name>
标记:
Element='<name>test</name>'
Element='<name>test</name>'
答案 1 :(得分:2)
试试这个:
'stationary//name/text()'
答案 2 :(得分:2)
您的XPath,
/stationary/*/name/text()
只会选择name
下textbook
元素中包含的文本节点,因为/*
会选择子元素,而另一个name
element是stationary
的孙子,而不是它的孩子。
最简单的更改是将/*/
替换为//
(如上所述)
@GillesQuenot,+ 1),
/stationary//name/text()
将沿着后轴或自身轴进行选择,因此它将选择孙子,并且您将获得两个name
元素'text()
个节点。
请注意,您说您正在尝试获取name
元素,因此从技术上讲,您应该放弃text()
步骤,
/stationary//name
将选择name
元素的所有stationary
元素后代。然后,作为最后一点,这个XPath(由@TimBiegeleisen提到,+ 1),
//name
将选择文档中的所有name
元素,无论根元素如何。