XSLT根据条件更新节点值

时间:2017-04-11 14:12:33

标签: xml xslt xslt-2.0

我有一个像下面这样的xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<properties>
<entry key="user">1234</entry>
<entry key="name">sam</entry>
</properties>

我想更改key =&#34; user&#34;的值标签。如果key的初始值=&#34; user&#34;是1234我想要key =&#34; user&#34;的值在输出xml中&#34;测试&#34;或者如果值为6666,则key =&#34; user&#34;在输出xml中&#34;你好&#34;使用xslt。 输出xml应该是这样的

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<properties>
<entry key="user">test</entry>
<entry key="name">sam</entry>
</properties>

我尝试使用此xslt但未获得所需的输出。

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="@key[.='1234']">
<xsl:attribute name="key">
<xsl:value-of select="'test'"/>
</xsl:attribute>
</xsl:template>

有人可以帮我解决这个问题,因为我是XSLT的新手。

1 个答案:

答案 0 :(得分:1)

您在要更改其值的元素的属性节点上进行匹配。您想要与这些元素本身匹配的模板。有很多方法可以做到这一点,这是一种方式:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="entry[@key='user'][.='1234']">
        <xsl:copy>
            <xsl:apply-templates select="@*"/>
            <xsl:text>test</xsl:text>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="entry[@key='user'][.='6666']">
        <xsl:copy>
            <xsl:apply-templates select="@*"/>
            <xsl:text>hello</xsl:text>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>