在 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>
我有示例 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>