2014-12-29 3 views
-1

Я не могу прочитать значение ниже атрибута («AttributeValue») с помощью XSLT, я делаю что-нибудь неправильно с помощьюXML, значение XLST не заполняется

< ---- здесь я не могу вставить код в формате XML --- это говорит не отформатирован должным образом, хотя это -> добавлено в комментариях ниже как XML и XSLT

<MonthlyReport> 
    <lstAttributes> 
    <Attributes> 
     <AttributeName>Stories</AttributeName> 
     <AttributeValue>2000</AttributeValue> 
    </Attributes> 
    </lstAttributes> 
</MonthlyReport> 


<xsl:template match="/MonthlyReport"> 
<html> 
    <table> 
    <tr> 
     <td> 
     <xsl:choose> 
      <xsl:when test="lstAttributes/Attributes/AttributeName='Stories'"> 
      <xsl:value-of select="AttributeValue"/> 
      </xsl:when> 
     </xsl:choose> 
     </td> 
    </tr> 
    </table> 
</html> 
</xsl:template> 
+2

Если его атрибут и в текущей области, вам нужно '@ AttributeValue'. Пожалуйста, предоставьте больше условий для вашего вопроса. – StuartLC

+0

добавил XML и XSLT, как получить значение элемента AttributeValue историй имени атрибут элемент –

ответ

1

Проблема здесь в том, что вы тестируете lstAttributes/Attributes/AttributeName но затем пытается выбрать AttributeValue, который не в текущей области видимости (при входе в этот шаблон, мы все еще в /MonthlyReport) области. Учитывая, что у вас нет в к otherwise ваш выбор, вы можете попробовать вместо:

<xsl:template match="/MonthlyReport"> 
<html> 
    <table> 
    <tr> 
     <td> 
     <xsl:value-of 
     select="lstAttributes/Attributes[AttributeName='Stories']/AttributeValue"/> 
     </td> 
    </tr> 
    </table> 
</html> 
</xsl:template> 

Это оставит td пустым, если ничего не найдено.

Если вы действительно хотели сделать что-то другое в otherwise, вам нужно будет повторить полный путь (если вы не принести lstAttributes/Attributes в настоящее время):

<xsl:choose> 
    <xsl:when test="lstAttributes/Attributes/AttributeName='Stories'"> 
    <xsl:value-of select="lstAttributes/Attributes/AttributeValue"/> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:text>No Stories present</xsl:text> 
    </xsl:otherwise> 
</xsl:choose> 

Обратите внимание, что, конечно, все Attribute* фактически элементы, отсюда начальная путаница около атрибутов в вашем вопросе.

+0

Perfect !!!! Спасибо Stuart –

0

Учитывая ввод XML как:

<item name="foo">contents</item> 

Если Колорадо ntext - item, тогда путь к значению атрибута равен @name. Если узлом контекста является @item, тогда путь к значению атрибута ..

<xsl:template select="item"> 
    <xsl:value-of select="@name"/> 
</xsl:template> 

<xsl:template select="@name"> 
    <xsl:value-of select="."/> 
</xsl:template> 
+0

мой формат XML отличается не один у дал пример <Имя_атрибут> Истории 2000 < xsl:choose> < /xsl:when>

+0

OK - на самом деле вы фактически не используете атрибуты XML, это просто элементы с конфискованным именем. Отформатируйте свой xml с помощью блоков кода - то есть каждая строка имеет отступы в 4 пробела, тогда она будет читаема. – user52889

+0

добавил xml и xslt, вот как получить атрибутное значение историй attributename –

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