2016-01-17 4 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 от второго значения Rep от второго периода, мой XSL будет выглядеть следующим образом:

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

Это возвращение: 7

Это значение мне нужно вернуться, однако содержимое XML изменить в зависимости от времени суток, и мне нужно выбрать его в соответствии с собственным значением Rep 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"> 
Смежные вопросы