0

我的要求是将所有包含 _ 的节点名称重命名为新名称。如何去除节点名称中 _ 的右侧字符并将名称的左侧保留为新节点名称?例如

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

1 回答 1

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. 正确使用和覆盖身份规则

  2. 正确使用功能substring-before()

于 2013-03-30T05:06:22.610 回答