如何使用 XLS 更改 XML 的特殊节点值



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>

最新更新