根据条件更改XSLT中的节点值

时间:2018-04-30 10:50:08

标签: xslt

我是XSLT中的新手,并且在转换值方面存在问题。 我有XML节点:

<NPD>0</NPD

输入XSD:

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

我使用Altova StyleVision创建了XSLT可视化,但现在我必须更改NPD节点值&#34; 0&#34;字符串&#34;否&#34;和价值&#34; 1&#34;字符串&#34;是&#34;。

如何获得此效果?

<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 :(得分:3)

使用模板规则:

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

<xsl:template match="wnio:DD[.='1']">Yes</xsl:template>

答案 1 :(得分:2)

您可以使用xsl:choose在XSLT中执行if / switch之类的语句。这是一个适用于您的场景的示例:

<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

那就是说,Michael Kay's answer的方式更好;优雅而优雅到了这一点。