有一种方法可以替换以特定字符串开头的所有节点的名称吗?
示例:
<ABCDocument ... >
<ABCElement ... />
....
<ABCElement ... />
</ABCDocument>
期望的输出:
<XYZDocument ... >
<XYZElement ... />
....
<XYZElement ... />
</XYZDocument>
简而言之,我需要的是在所有节点名称中用前缀XYZ替换前缀ABC。 有办法实现这个目标吗?
谢谢。
答案 0 :(得分:2)
要使用replace
函数,您需要一个XSLT 2.0处理器,如Saxon 9或XmlPrime或AltovaXML,但对于您的简单情况,您可以编写例如。
<xsl:template match="*[starts-with(local-name(), 'ABC')]">
<xsl:element name="XYZ{substring(local-name(), 4)}">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
当然,对于整个工作方法,还要使用身份转换模板
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
在样式表中,不加改变地复制其他节点并保持处理。