我的要求是将其中包含_的所有节点名重命名为新名称。 如何在节点名称中删除_ present右侧的字符,并将名称的左侧保留为新节点名称? e.g
<abc_2013></abc_2013> to be renamed as <abc></abc>
答案 0 :(得分:1)
此转化:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[contains(name(), '_')]">
<xsl:element name="{substring-before(name(),'_')}"
namespace="{namespace-uri()}">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
应用于此XML文档时:
<abc_2013>xYz</abc_2013>
生成想要的正确结果:
<abc>xYz</abc>
<强>解释强>:
正确使用和覆盖 identity rule 。
正确使用 substring-before()