2014-02-24 42 views
1

因此,我正在通过XML工作簿中的练习,并且需要能够在文档中所有这些元素的集合中获取给定元素的以下兄弟元素。在例如下列我需要得到该组在整个文档中,并从所有NODE2元件,我需要以1:1的位置和第一以下兄弟与'attrib'属性等于$var选择NODE2元件...如何获得关注同胞属性?

<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]" 
/> 

回答

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

您可以将第二个谓词与一个或另一对括号连接起来,因为它们不会更改上下文。它可能是[pred1 and pred2][pred1][pred2]。所以你可以说element[1][@attrib=$var]element[position() = 1 and @attrib = $var]

我认为应该让你朝正确的方向发展。