在 XSLT 转换中从 XML 文件中删除 ^ 字符

Remove ^ char from XML file in XSLT transformation

我有示例 XML 文件,其中包含“^^”,我需要将其从所有地方删除。

在 XML 中有 'n' 种可能性找到“^^”,所以我不能 select 基于 XPATH。

提前致谢。

    Input

    <CATALOG>         
    <CD>         
    <TITLE>^^Empire Burlesque</TITLE>         
    <ARTIST>Bob Dylan</ARTIST>         
    <COUNTRY>USA</COUNTRY>         
    <COMPANY>Columbia^^</COMPANY>         
    <PRICE>10.90</PRICE>         
    <YEAR>1985</YEAR>         
    </CD>         
    <CD>         
    <TITLE>Hide your heart</TITLE>         
    <ARTIST>^^Bonnie Tyler</ARTIST>         
    <COUNTRY>UK</COUNTRY>         
    <COMPANY>^^CBS Records</COMPANY>         
    <PRICE>9.90</PRICE>         
    <YEAR>1988</YEAR>         
    </CD>         
    </CATALOG>

    Desire Output

    <CATALOG>         
    <CD>         
    <TITLE>Empire Burlesque</TITLE>         
    <ARTIST>Bob Dylan</ARTIST>         
    <COUNTRY>USA</COUNTRY>         
    <COMPANY>Columbia</COMPANY>         
    <PRICE>10.90</PRICE>         
    <YEAR>1985</YEAR>         
    </CD>         
    <CD>         
    <TITLE>Hide your heart</TITLE>         
    <ARTIST>Bonnie Tyler</ARTIST>         
    <COUNTRY>UK</COUNTRY>         
    <COMPANY>CBS Records</COMPANY>         
    <PRICE>9.90</PRICE>         
    <YEAR>1988</YEAR>         
    </CD>         
    </CATALOG>

我试过类似的方法。

   <xsl:template match="@*|*|processing-instruction()">
    <xsl:copy>
        <xsl:apply-templates select="*|@*|translate(text(),'^^',' ')|processing-instruction()"/>            
    </xsl:copy>
</xsl:template>

但是没用

使用 translate() 函数从所有文本节点中删除所有出现的 ^ 字符。


已添加:

如评论中所述,您应该将 identity transform template 与匹配任何文本节点的覆盖模板一起使用:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

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

<xsl:template match="text()" priority="0">
    <xsl:value-of select="translate(., '^', '')"/>
</xsl:template>

</xsl:stylesheet>