XSLT - Value-Of - PullRequest
       3

XSLT - Value-Of

0 голосов
/ 02 августа 2011

так же, как вы можете сделать следующее ...

<xsl:for-each select="catalog/cd[artist='Bob Dylan']">

Можете ли вы выполнить ту же фильтрацию с помощью оператора Value-Of?

<xsl:value-of select="value[name='Name']" />

Спасибо, Джеймс.

Редактировать:

Извините за путаницу.

У меня был какой-то XML:

<DynamicData>
    <item>
      <name>Name</name>
      <value xsi:type="xsd:int">0</value>
    </item>
    <item>
      <name>Value</name>
      <value xsi:type="xsd:long">9</value>
    </item>
</DynamicData>

Я хотел использовать фильтр для моего значения select, почти так же, как это возможно, делая для каждого.Я только начал изучать XSLT, поэтому не был уверен в его возможностях.В конце я использовал следующий XSLT:

<set>   
    <xsl:attribute name="name"> 
       <xsl:choose>
        <xsl:when test="item[name='Name']/value=0">Low</xsl:when>
        <xsl:when test="item[name='Name']/value=1">Medium</xsl:when>
        <xsl:when test="item[name='Name']/value=2">High</xsl:when>  
       </xsl:choose>
    </xsl:attribute>
    ...

Проблема, с которой я столкнулся, заключалась в том, что я помещал фильтр после элемента значения в тесте, вот так.<xsl:when test="item/value[name='Name']=2">High</xsl:when> Очевидно, что элемент 'name' - это не элемент 'value', а элемент 'item', следовательно, почему это не сработало.

Спасибо за вашу помощь всем, я получил в конце концов:)

Ответы [ 3 ]

2 голосов
/ 02 августа 2011

Помните, что в XSLT 1.0 <xsl:value-of select="someNodeSet"/> выводит только строковое значение первого узла в someNodeSet

На другой стороне :

<xsl:for-each select="someNodeSet">
 <xsl:value-of select="."/>
</xsl:for-each>

выводит строковое значение каждого узла в someNodeSet.

1 голос
/ 02 августа 2011

Да, select принимает выражение XPATH в качестве аргумента

XSL: значение-из

Хотя в спецификации указано, что вы можете, это может зависеть от реализацииМеханизм XML / XSL.

0 голосов
/ 03 августа 2011

Обратите внимание, что в XSLT 1.0 вы можете обойти это с помощью xsl:copy-of и text() тестового узла.


Пример с учетом этого ввода:

<catalog>
    <cd>
        <artist>Bob Dylan</artist>
    </cd>
    <cd>
        <artist>Pink Floyd</artist>
        <title>ummagumma</title>
    </cd>
    <cd>
        <artist>Pink Floyd</artist>
        <title>Atom Earth Mother</title>
    </cd>
</catalog> 

Вы можете использовать xsl:copy-of следующим образом:

 <xsl:copy-of select="catalog/cd[artist='Pink Floyd']/title/text()"/>

вернет значение всех соответствующихузлы в точности как в:

 <xsl:for-each select="catalog/cd[artist='Pink Floyd']/title">
   <xsl:value-of select="."/>
 </xsl:for-each>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...