如何使用xslt在节点名称中删除'_'字符

时间:2013-03-29 09:00:26

标签: xslt-1.0

我的要求是将其中包含_的所有节点名重命名为新名称。 如何在节点名称中删除_ present右侧的字符,并将名称的左侧保留为新节点名称? e.g

<abc_2013></abc_2013> to be renamed as <abc></abc>

1 个答案:

答案 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>

<强>解释

  1. 正确使用和覆盖 identity rule

  2. 正确使用 substring-before()

  3. 功能