Previous xml
<?xml version="1.0" encoding="UTF-8"?>
<cities>
<city abbr="A">"NameA1"</city>
<city abbr="B">"NameB1"</city>
<city abbr="C">"NameC1"</city>
</cities>
更新的 xml
<?xml version="1.0" encoding="UTF-8"?>
<cities>
<city abbr="A">"NameD1"</city>
<city abbr="B">"NameB1"</city>
<city abbr="C">"NameC1"</city>
</cities>
描述:我想找出属性"abbr"等于"A"的节点,并将值从"NameA1"更改为"NameD1"。我不熟悉 xsl。你能告诉我怎么做吗?
应首先使用 XSLT 标识模板
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
这将复制 XML 中的所有现有节点,而无需更改。然后,您只需要添加一个单独的模板,该模板将优先于标识模板,您可以在其中匹配要更改的文本节点。
<xsl:template match="city[@abbr='A']/text()">
<xsl:text>NameD1</xsl:text>
</xsl:template>
将这些放在一起可以得到:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="city[@abbr='A']/text()">
<xsl:text>"NameD1"</xsl:text>
</xsl:template>
</xsl:stylesheet>