XSLT重命名元素

时间:2009-11-25 18:24:26

标签: xml xslt

我有一个XML文档,我想通过XSLT重命名一些元素:

<Assert @some attributes here>
  <conent>
    <And>
      <formula>
        <Atom>
          <opr>
...

例如,我想将<opr>重命名为<op>。我有以下XSLT:

  <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
  </xsl:template>

  <xsl:template match="opr">
    <op>
      <xsl:apply-templates select="@*|node()"/>
    </op>
  </xsl:template>

当我调试XSLT时,它不会进入“opr”模板,它会被第一个模板匹配。生成的输出与输入相同。任何人都可以帮我吗?

2 个答案:

答案 0 :(得分:1)

<xsl:template name="YourNameHere">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
  </xsl:template>

  <xsl:template match="opr">
    <op>
      <xsl:call-template name="YourNameHere"/>
    </op>
  </xsl:template>

您可能仍需要类似&lt; xsl:template match =“/”/&gt;让它继续下去。

答案 1 :(得分:0)

这有用吗?

<xsl:template match="*">
        <xsl:copy>
                <xsl:copy-of select="@*" />
                <xsl:apply-templates select="*" />
        </xsl:copy>
</xsl:template>
<xsl:template match="opr">
        <op>
                <xsl:copy-of select="@*" />
                <xsl:apply-templates select="*" />
        </op>
</xsl:template>