所以我在XML工作簿中进行练习,我需要能够在文档中所有这些元素的集合中获得给定元素的以下兄弟。在下面的示例中,我需要获取整个文档中所有NODE2
元素的集合,然后我需要选择位置为1的NODE2
元素和第一个跟随{{1}的兄弟元素1}}属性等于'attrib'
...
$var
这是我到目前为止所做的,但它不起作用。有人能指出我正确的方向吗?
<ROOT>
<SUBROOT>
<NODE1>
<NODE2 attrib="data1">
<NODE2 attrib="data2">
</NODE1>
<NODE1>
<NODE2 attrib="data3">
<NODE2 attrib="data4">
</NODE1>
<NODE1>
<NODE2 attrib="data5">
<NODE2 attrib="data6">
</NODE1>
</SUBROOT>
</ROOT>
答案 0 :(得分:1)
所有NODE2
元素的集合为descendent-or-self::NODE2
或//NODE2
。你不需要那样的&#34; .
&#34;
正如您在代码中所写的那样,没有以下兄弟属性(name
)。可以有以下兄弟NODE2
,因此您可以编写following-sibling:node()
或following-sibling:NODE2
(因为所有兄弟节点都是NODE2
)。
现在您已拥有following-sibling
,您可以添加谓词来测试其属性。不是name
,而是attrib
(根据您的代码)。您可以使用attribute::attrib
或@attrib
。然后它可以是谓词中的@attrib = $var
。
您可以使用和/或另一对括号连接第二个谓词,因为它们不会更改上下文。它可以是[pred1 and pred2]
或[pred1][pred2]
。因此,您可以说element[1][@attrib=$var]
或element[position() = 1 and @attrib = $var]
。
我认为这应该让你朝着正确的方向前进。