2014-02-24 43 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]

我認爲應該讓你朝正確的方向發展。