Изменение значения узла в XSLT в зависимости от условий - PullRequest
0 голосов
/ 30 апреля 2018

Я новичок в XSLT и у меня проблема с преобразованием значений. У меня есть узел XML:

<NPD>0</NPD

введите XSD:

<xs:element name="NPD" type="xs:boolean" minOccurs="0"/>

Я создал визуализацию XSLT, используя Altova StyleVision, но теперь мне нужно изменить значение нода NPD "0" на строку "Нет" и значение "1" на строку "да".

Как мне получить этот эффект?

<td colspan="3" style="padding-left:10px; width:1.40in; ">
    <xsl:for-each select="$XML">
        <xsl:for-each select="wnio:DD">
            <xsl:for-each select="wnio:NPD">
                <span style="color:#0024c0; ">
                    <xsl:apply-templates/>
                </span>
            </xsl:for-each>
        </xsl:for-each>
    </xsl:for-each>
    <span>
        <xsl:text>&#160; </xsl:text>
    </span>
</td>

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Использовать шаблонные правила:

<xsl:template match="wnio:DD[.='0']">No</xsl:template>

<xsl:template match="wnio:DD[.='1']">Yes</xsl:template>
0 голосов
/ 30 апреля 2018

Вы можете использовать xsl:choose для выполнения операторов if / switch в XSLT. Вот пример, который должен работать для вашего сценария:

<xsl:template match="NPD">
    <xsl:choose>
        <xsl:when test="./text()='0'">
            <xsl:text>No</xsl:text>
        </xsl:when>
        <xsl:when test="./text()='1'">
            <xsl:text>Yes</xsl:text>
        </xsl:when>
        <xsl:otherwise>
            <xsl:message terminate="yes">The Yes/No value to be translated did not match expected input</xsl:message>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

Подробнее см. https://www.w3schools.com/xml/xsl_choose.asp.

Тем не менее, Ответ Майкла Кея намного лучше; красиво и элегантно.

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