2016-01-17 477 views
1

有可能我沒有正確地問這個問題,所以請耐心等待。我需要搜索具有給定值的節點,並返回其屬性之一。根據節點的值選擇屬性

下面是無稽之談的數據,但它說明了我的觀點:

<Period type="Day" value="2016-01-18Z"> 
<Rep D="ESE" F="-1" G="20" H="71" Pp="6" S="9" T="2" V="VG" W="7" U="0">0</Rep> 
<Rep D="SE" F="-1" G="18" H="77" Pp="9" S="9" T="3" V="VG" W="8" U="0">180</Rep> 
<Rep D="SE" F="-1" G="20" H="76" Pp="9" S="9" T="3" V="GO" W="8" U="0">360</Rep> 
</Period> 
<Period type="Day" value="2016-01-19Z"> 
<Rep D="E" F="-2" G="9" H="77" Pp="3" S="4" T="0" V="GO" W="2" U="0">540</Rep> 
<Rep D="E" F="-3" G="9" H="80" Pp="5" S="4" T="0" V="GO" W="7" U="0">720</Rep> 
<Rep D="ENE" F="-3" G="9" H="85" Pp="4" S="4" T="-1" V="GO" W="2" U="0">900</Rep> 
</Period> 

我明白,如果我要選擇例如屬性W的從第二期第二代表值,我的XSL是這樣的:

<xsl:value-of select="Period[2]/Rep[2]/@W"> 

這將返回:7

這是我需要返回值,但是XML內容的變化取決於一天中的時間,我需要根據代表自己的值720選擇它,而不是在樹中的位置。

我搞砸周圍試圖以下,顯然我找錯了樹:

<xsl:value-of select="Period[2]/Rep['180']/@W" /> 
<xsl:value-of select="Period[2]/Rep[Rep='180']/@W" /> 
<xsl:value-of select="Period[2]/'180'/@W" /> 

回答

2

「我需要根據代表自己的720值它來選擇,而不是它的在樹中的位置「

基本上,您可以使用.引用當前上下文節點。因此,這是一個可能的方式:

<xsl:value-of select="Period[2]/Rep[.=720]/@W" /> 
2

如果這對你的作品選擇基於位置7

<xsl:value-of select="Period[2]/Rep[2]/@W"> 

,然後用它來選擇7基於內容:

<xsl:value-of select="Period[@value = '2016-01-19Z']/Rep[. = 720]/@W"> 

或者,如果Period是無關的:

<xsl:value-of select=".//Rep[. = 720]/@W">