我可能没有正确地提出这个问题,所以请耐心等待。我需要搜索具有给定值的节点,并返回其中一个属性。
以下是无意义的数据,但它说明了我的观点:
<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>
我明白如果我想选择例如来自第二个Period的第二个Rep值的属性W,我的xsl看起来像这样:
<xsl:value-of select="Period[2]/Rep[2]/@W">
这将返回:7
这是我需要返回的值,但是XML内容会根据一天中的时间而变化,我需要根据Rep自己的720值而不是它在树中的位置来选择它。< / p>
我在尝试以下事情时搞砸了,很明显我正在咆哮错误的树:
<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" />
答案 0 :(得分:2)
&#34;我需要根据代表自己的720值而不是它在树中的位置选择它&#34;
基本上,您可以使用.
来引用当前上下文节点。所以这是一种可能的方式:
<xsl:value-of select="Period[2]/Rep[.=720]/@W" />
答案 1 :(得分: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">