2013-04-17 2 views
1

Я новичок в XSL и потратил часы на поиск решения для извлечения значений атрибутов из XSLT.Сохранение атрибутов XSL для массива JavaScript при условии

Мой XML выглядит следующим образом:

<itemList> 
    <item id="1" name="mydoc1" showItem="option1">My documents1</item> 
    <item id="2" name="mydoc1" showItem="option2">My documents2</item> 
    <item id="2" name="mydoc1" showItem="option1">My documents3</item> 
    ... 
    <item id="k" name="mydocWhatever" showItem="option1">My documents Whatever</item> 
    ... 

    <item id="n" name="mydocN" showItem="optionN">My documentsN</item> 
</itemList> 

Я хочу, чтобы получить все item.name когда showItem="option1" и хранить его в массив JavaScript или объекта.

Я пробовал это, но он не работает.

<xsl:for-each select="itemList/item[@showItem = 'option1']"> 
    myItem='<xsl:value-of select="//itemList/item/@name"/>'); 
</xsl:for-each> 

У кого-нибудь есть решение?

ответ

1

Ваш контекст изменяется внутри <xsl:for-each>, и поскольку нет потомков <itemlist> s, ваш выбор пуст.

<xsl:for-each select="itemList/item[@showItem = 'option1']"> 
    myItem = '<xsl:value-of select="@name" />' ; 
</xsl:for-each> 
1
<xsl:text>var myItem = [</xsl:text> 
<xsl:for-each select="itemList/item[@showItem = 'option1']"> 
    <xsl:if test="position() &gt; 1">, </xsl:if> 
    <xsl:value-of select="concat(&quot;'&quot;, @name, &quot;'&quot;)"/> 
</xsl:for-each> 
<xsl:text>];</xsl:text> 

должен вывести var myItem = ['mydoc1', 'mydoc1', 'mydocWhatever'];.

+0

Благодарим за помощь. Я пробовал выше, он не работает в моем коде. Я могу получить массив всех имен, используя следующее: myItem = ''; Но после добавления условия myItem = ''; myItem пуст. Любые идеи? –

+0

Исправлено, это вызвано предварительным процессором, атрибут «showItem» был отфильтрован. Вот почему я не вижу этого. –

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