Renaming nodes and values with xslt
        Posted  
        
            by 
                T.K.
            
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by T.K.
        
        
        
        Published on 2011-02-11T15:15:33Z
        Indexed on 
            2011/02/11
            15:25 UTC
        
        
        Read the original article
        Hit count: 330
        
Hello world,
I'm new to xslt, and have a task that I'm not really sure where to go with. I want to rename nodes, but maintain the format all node declarations. In the actual context I'll be applying this to, I'll be doing a series of renames like this, but for the sake of brevity, the sample I've written up only involves renaming one node. I am using XSL 1.0.
Input:
<variables>
  <var>
    <RENAME> a </RENAME>
  </var>
  <var RENAME='b'/>
  <var>
    <DO_NOT_TOUCH> c </DO_NOT_TOUCH>
  </var>
  <var DO_NOT_TOUCH='d'/>
</variables>
Desired Output:
<variables>
  <var>
    <DONE> a </DONE>
  </var>
  <var DONE='b'/>
  <var>
    <DO_NOT_TOUCH> c </DO_NOT_TOUCH>
  </var>
  <var DO_NOT_TOUCH='d'/>
</variables>
My xslt:
<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>
Current Output
<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>
© Stack Overflow or respective owner