Проверьте, равна ли переменная for-each записи XML - PullRequest
0 голосов
/ 19 августа 2010

Я пытаюсь добавить атрибут 'selected' в <option>.Я пробовал разные способы, и я не могу заставить его работать.Вот как я это пытаюсь:

<xsl:for-each select="page/index/values/albums">
    <option>
        <xsl:attribute name="value"><xsl:value-of select="id" /></xsl:attribute>
        <xsl:if test="page/index/values/album = id">
             <xsl:attribute name="selected">selected</xsl:attribute>
        </xsl:if>
        <xsl:value-of select="name" />
    </option>
</xsl:for-each>

Какая правильная форма для <xsl:if />?

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

МойXML-файл:

<page>
    <index>
        <values>
            <album>2</album>

            <albums>
                <id>1</id>
                <name>Album #1</name>
            </albums>

            <albums>
                <id>2</id>
                <name>Album #2</name>
            </albums>
        </values>
    </index>
</page>

Вывод:

<option value="1">Album #1</option>
<option value="2" selected="selected">Album #2</option>

Ответы [ 3 ]

2 голосов
/ 19 августа 2010

Используемый вами XPath неверен:

<xsl:if test="page/index/values/album = id">

Значение должно быть:

<xsl:if test="../album = id">

Вы находитесь в контексте различных узлов albums, поэтому вам необходимоперейдите к родительскому узлу values, прежде чем получите значение album.

В качестве альтернативы, вам нужно получить root-адрес вашего XPath:

<xsl:if test="/page/index/values/album = id">
1 голос
/ 19 августа 2010

Условие проверки должно быть:

id = ../album

Редактировать : Теперь с желаемым выводом используйте эту таблицу стилей:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="values">
        <select>
            <xsl:apply-templates select="albums"/>
        </select>
    </xsl:template>
    <xsl:template match="albums">
        <option value="{id}">
            <xsl:apply-templates/>
        </option>
    </xsl:template>
    <xsl:template match="id"/>
    <xsl:template match="id[.=../../album]">
        <xsl:attribute name="selected">selected</xsl:attribute>
    </xsl:template>
</xsl:stylesheet>

Вывод:

<select>
    <option value="1">Album #1</option>
    <option value="2" selected="selected">Album #2</option>
</select>
0 голосов
/ 19 августа 2010

Ваша форма для добавления атрибута правильная, но, как указал @Alejandro, ваше условие проверки, вероятно, неверное.Особенно левая часть "=".Эти выражения XPath относятся к узлу контекста, который является page/index/values/albums.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...