Select 每个节点的第一个元素通过 XPath
Select first element of each node via XPath
我有一个 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
元素中的什么位置。
以下 XPath
/Persons/Company//*[1]//name[1]/text()
会select
1
5
根据要求,未明确指定 Employee
。
注意:您可以将 //
说明符中的一个或两个收紧为 /
,具体取决于一般情况下未说明的具体情况. (在测试直接父子关系而不是更一般的自子孙关系时使用 /
。)
这对 descendant::
轴很好用:
/Persons/Company/descendant::name[1]
这是一个很好的例子,说明 //
和 descendant::
的含义略有不同 - //
的定义是 shorthand /descendant-or-self::node()/
包括斜杠,所以
/Persons/Company//name[1]
表示
/Persons/Company/descendant-or-self::node()/name[1]
这清楚地表明 [1]
仅适用于最后的子步骤(因此返回每个 name
,即其各自父级中的第一个 name
),而不适用于整个搜索后代。
我有一个 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
元素中的什么位置。
以下 XPath
/Persons/Company//*[1]//name[1]/text()
会select
1
5
根据要求,未明确指定 Employee
。
注意:您可以将 //
说明符中的一个或两个收紧为 /
,具体取决于一般情况下未说明的具体情况. (在测试直接父子关系而不是更一般的自子孙关系时使用 /
。)
这对 descendant::
轴很好用:
/Persons/Company/descendant::name[1]
这是一个很好的例子,说明 //
和 descendant::
的含义略有不同 - //
的定义是 shorthand /descendant-or-self::node()/
包括斜杠,所以
/Persons/Company//name[1]
表示
/Persons/Company/descendant-or-self::node()/name[1]
这清楚地表明 [1]
仅适用于最后的子步骤(因此返回每个 name
,即其各自父级中的第一个 name
),而不适用于整个搜索后代。