我有一个像下面这样的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的新手。
答案 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>