所以我正在XML工作簿中进行练习,我需要能够在文档中所有这些元素的集合中获取给定元素的以下同级元素。例如,在下面的示例中,我需要获取整个文档中所有NODE2
元素的集合,从中我需要选择位置为 1 的NODE2
元素和第一个属性等于 $var
的后续兄弟'attrib'
<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>
这就是我到目前为止所拥有的,但它不起作用。谁能指出我正确的方向?
<xsl:value-of select=".//NODE2[following-sibling::@name[1]=$var and position()=1]"
/>
所有NODE2
元素的集合是descendent-or-self::NODE2
或//NODE2
。你不需要那个".
没有以下同级是属性(name
),正如您在代码中编写的那样。可以有一个以下同级,它是一个NODE2
,所以你可以写following-sibling:node()
或following-sibling:NODE2
(因为无论如何所有的同级节点都是NODE2
的)。
现在您已经有了该following-sibling
,您可以添加一个谓词来测试其属性。不是name
,而是attrib
(根据您的代码)。您可以使用 attribute::attrib
或 @attrib
。然后它可以在谓词中@attrib = $var
。
您可以将第二个谓词与 and 或另一对括号连接起来,因为它们不会更改上下文。可能是[pred1 and pred2]
或[pred1][pred2]
.所以你可以说element[1][@attrib=$var]
或element[position() = 1 and @attrib = $var]
.
我认为这应该会让你朝着正确的方向前进。