Объединить узел xml с переменной в xsl

Привет, мне нужно объединить путь узла xsl с переменной, чтобы иметь динамический путь узла в xslt.

У меня есть этот узел:

<PRODOTTI>
  <ITEM STATO="2">
</PRODOTTI>
<STATI>
  <COD0>Errore</COD0>
  <COD1>In spedizione entro le prossime 12-24 ore</COD1>
  <COD2>In spedizione entro le prossime 24-48 ore</COD2>
 </STATI>

а в xsl у меня есть

<xsl:variable name="stato_ordine" select="@STATO"/>
<xsl:variable name="ordine" select="concat(../../../TRADUZIONI/STATI/COD, $stato_ordine)" />
<xsl:value-of select="$ordine"></xsl:value-of>

но на выходе я получаю только значение «stato_ordine», вместо этого мне нужен полный путь, чтобы получить значение узла.

Есть ли в любом случае, чтобы иметь это?

Спасибо.


person Misterwolf3    schedule 13.07.2012    source источник
comment
Вы уверены, что ../../../TRADUZIONI/STATI/COD делает правильный выбор? Не могли бы вы вместо этого попробовать //STATI/COD, просто в качестве теста?   -  person Mihai Todor    schedule 13.07.2012
comment
Я пробовал, к сожалению, тот же результат   -  person Misterwolf3    schedule 13.07.2012
comment
И если вы просто выведете значение //STATI/COD, получите ли вы ожидаемые результаты?   -  person Mihai Todor    schedule 13.07.2012


Ответы (1)


Я думаю, вы хотите <xsl:value-of select="../../../TRADUZIONI/STATI/*[local-name() = concat('COD', $stato_ordine)]"/>.

[править] Для более эффективного решения вы можете определить ключ как дочерний элемент xsl:stylesheet

<xsl:key name="k1" match="STATI/*[starts-with(local-name(), 'COD')]" use="substring(local-name(), 4)"/>

а затем делать

<xsl:value-of select="key('k1', $stato_ordine)"/>

должно хватить.

person Martin Honnen    schedule 13.07.2012