我有一个像这样的XML文档
<Persons>
<Company>
...
<Employee>
<name>1</name>
<name>2</name>
</Employee>
<Employee>
<name>3</name>
<name>4</name>
</Employee>
</Company>
<Company>
...
<Employee>
<name>5</name>
<name>6</name>
</Employee>
<Employee>
<name>7</name>
<name>8</name>
</Employee>
</Company>
</Persons>
我想抓住每个节点的第一个元素。在这里,我想获得1和5 。
我正在使用此XPath来执行此操作:
/Persons/Company//name[1]/text()
但我得到1,3,5,7
注意:我无法使用/Persons/Company/Employee[1]//name[1]/text()
因为Employee
是一个任意标记,我不知道name
元素实际存在于Company
元素中的哪个位置。
答案 0 :(得分:1)
这适用于descendant::
轴:
/Persons/Company/descendant::name[1]
这是//
和descendant::
意味着略有不同的事例的一个很好的例子 - //
的定义是它是/descendant-or-self::node()/
的简写,包括斜线,所以
/Persons/Company//name[1]
装置
/Persons/Company/descendant-or-self::node()/name[1]
这清楚地表明[1]
仅适用于最后的子步骤(因此返回每个name
,这是其各自父级中的第一个name
,而不是整个搜索为了后代。
答案 1 :(得分:0)
以下XPath
/Persons/Company//*[1]//name[1]/text()
将选择
1
5
按要求明确指定Employee
。
注意:您可以将一个或两个//
说明符收紧到/
,具体取决于您的一般情况的未说明的具体情况。 (在测试直接父子关系时使用/
而不是更一般的自我后代关系。)