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