2016-04-20 2 views
1

Я знаю, что на вопрос был дан ответ уже несколько раз, но по какой-то причине не работает для меня. Так что я хочу добиться того, чтобы вывести содержимое элемента, используя это значение атрибута для доступа к нему, но вместо того, чтобы объявить конкретное значение для атрибута, как:

<xsl:value-of select="title[@attribute='value']"/> 

Это работает для моего кода, но я хочу использовать переменную как:

<xsl:value-of select="title[@attribute='$variable']"/> 

, но независимо от того, что я делаю, или различные способы стараюсь это , такие как:

<xsl:value-of select="//title[@attribute='$variable']"/> 

или

<xsl:value-of select="//title[@attribute= $variable]"/> 

не ouptut ничего, и я не получаю никаких ошибок от саксонской, так что я понятия не имею, что происходит.


XML файл

<root> 
    <documentname> 
     <element>text</element> 
     . 
     . 
     <element1 atributename1="VALUE1">text</element1> 
     . 
     . 
     <element95 atributename1="value1" secondatribute="0001"/> 
     . 
     . 
    </documentname> 
    </root> 

XSL файл

<xsl:template match="element95 "> 
     <xsl:choose> 
     <xsl:when test="@atributename1">  
     <xsl:variable name="keyb" select="substring(@secondatribute,1,4)"/> 
     <xsl:variable name="keyval" select="substring(@atributename1, 0,6)" /> 
     <xsl:variable name="keyc"> 
     <xsl:value-of select="'upper-case($keyval)'"/></xsl:variable> 
     <a href="#{$keyc}"><xsl:value-of select="($keyb)"/>.0(<xsl:value-of select="//element1 [@atributename1=($keyc)]"/>)</a> 
    </xsl:when> 
</xsl:choose> 

Выход:

1.0() 

желательно Ouput:

1.0(text) 
+0

Ничего из этого не компилируется для меня, ']' отсутствует. – biziclop

+1

Можете ли вы включить минимальную таблицу стилей XSL и тестовый документ, который создает эту проблему? – biziclop

+1

@Eugenios ваш последний фрагмент выглядит отлично, поэтому невозможно сказать, что было не так, не имея возможности увидеть минимальный, но полный пример, демонстрирующий проблему. – har07

ответ

0

Ваши вопросы до строковых литералов

<xsl:value-of select="//title[@attribute='$variable']"/> 

говорит «я хочу, чтобы значение атрибута быть фактическим строка«переменной $ '' , поэтому вы хотите использовать:

<xsl:value-of select="//title[@attribute= $variable]"/> 

Однако вы также сделали эту ошибку при установке переменной:

 <xsl:variable name="keyc"> 
    <xsl:value-of select="'upper-case($keyval)'"/></xsl:variable> 

использование:

 <xsl:variable name="keyc"> 
    <xsl:value-of select="upper-case($keyval)"/></xsl:variable> 

или более читаемым

<xsl:variable name="keyc" select="upper-case($keyval)"/> 

И прочитал вверх по обработке строки и расширения в xslt вообще.

0

Вот некоторые проблемы, связанные с вашими XSL кодами:

  • $keyc переменная была установлена ​​в символьной строки 'upper-case($keyval)'.Удалите одиночные кавычки, чтобы распознать выражение XPath и правильно оценить.

  • substring(@atributename1, 0,6) в вашей демонстрационной версии 'value'. Непонятно, чего вы пытаетесь достичь здесь, но это определенно вызывает //element1[@atributename1=($keyc)], чтобы найти совпадение позже, потому что нет atributename1 со значением равным 'value' в образце XML. Вы хотите либо установить параметр substring() на более высокую длину, либо использовать substring() той же длины при сравнении @atributename1 с $keyc.

+1

спасибо, что это был« верхний регистр ($ keyval) », – Eugenios

Смежные вопросы