使用xslt重命名节点和值

使用xslt重命名节点和值,xslt,rename,xslt-1.0,Xslt,Rename,Xslt 1.0,我是xslt新手,有一项任务我真的不确定该去哪里。我想重命名节点,但保留所有节点声明的格式。在我将要应用它的实际上下文中,我将进行一系列类似这样的重命名,但为了简洁起见,我编写的示例只涉及重命名一个节点。我正在使用XSL1.0 输入: <variables> <var> <RENAME> a </RENAME> </var> <var RENAME='b'/> <var> <

我是xslt新手,有一项任务我真的不确定该去哪里。我想重命名节点,但保留所有节点声明的格式。在我将要应用它的实际上下文中,我将进行一系列类似这样的重命名,但为了简洁起见,我编写的示例只涉及重命名一个节点。我正在使用XSL1.0

输入:

<variables>
  <var>
    <RENAME> a </RENAME>
  </var>
  <var RENAME='b'/>
  <var>
    <DO_NOT_TOUCH> c </DO_NOT_TOUCH>
  </var>
  <var DO_NOT_TOUCH='d'/>
</variables>
<variables>
  <var>
    <DONE> a </DONE>
  </var>
  <var DONE='b'/>
  <var>
    <DO_NOT_TOUCH> c </DO_NOT_TOUCH>
  </var>
  <var DO_NOT_TOUCH='d'/>
</variables>
<xsl:template match="RENAME">
        <RENAMED>
                <xsl:apply-templates select="@*|node()"/>
        </RENAMED>
</xsl:template>

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

A.
C
所需输出:

<variables>
  <var>
    <RENAME> a </RENAME>
  </var>
  <var RENAME='b'/>
  <var>
    <DO_NOT_TOUCH> c </DO_NOT_TOUCH>
  </var>
  <var DO_NOT_TOUCH='d'/>
</variables>
<variables>
  <var>
    <DONE> a </DONE>
  </var>
  <var DONE='b'/>
  <var>
    <DO_NOT_TOUCH> c </DO_NOT_TOUCH>
  </var>
  <var DO_NOT_TOUCH='d'/>
</variables>
<xsl:template match="RENAME">
        <RENAMED>
                <xsl:apply-templates select="@*|node()"/>
        </RENAMED>
</xsl:template>

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

A.
C
我的xslt:

<variables>
  <var>
    <RENAME> a </RENAME>
  </var>
  <var RENAME='b'/>
  <var>
    <DO_NOT_TOUCH> c </DO_NOT_TOUCH>
  </var>
  <var DO_NOT_TOUCH='d'/>
</variables>
<variables>
  <var>
    <DONE> a </DONE>
  </var>
  <var DONE='b'/>
  <var>
    <DO_NOT_TOUCH> c </DO_NOT_TOUCH>
  </var>
  <var DO_NOT_TOUCH='d'/>
</variables>
<xsl:template match="RENAME">
        <RENAMED>
                <xsl:apply-templates select="@*|node()"/>
        </RENAMED>
</xsl:template>

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

电流输出

<variables>
  <var>
    <RENAMED> a </RENAMED>
  </var>
  <var RENAME="b">
  </var>
  <var>
    <DO_NOT_TOUCH> c </DO_NOT_TOUCH>
  </var>
  <var DO_NOT_TOUCH="d">
  </var>
</variables>

A.
C

根据您的样本输出:

<variables>
    <var>
        <DONE> a </DONE>
    </var>
    <var DONE="b"></var>
    <var>
        <DO_NOT_TOUCH> c </DO_NOT_TOUCH>
    </var>
    <var DO_NOT_TOUCH="d"></var>
</variables>

A.
C

这也可以,但我相信另一个答案更好。我只是想拿出我的两分钱

<xsl:variable name="Foo" select="DONE"/>

<variables>
  <var>
    <xsl:element name="{$Foo}"> a </xsl:element>
  </var>
  <var DONE='b'/>
  <var>
    <DO_NOT_TOUCH> c </DO_NOT_TOUCH>
  </var>
  <var DO_NOT_TOUCH='d'/>
</variables>

A.
C

感谢您的帮助。帮助我了解xslt,这对我有很大帮助。