Renaming nodes and values with xslt

后端 未结 2 1656
生来不讨喜
生来不讨喜 2020-12-18 12:28

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\

相关标签:
2条回答
  • 2020-12-18 12:41
    <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="xml" indent="yes"/>
        <xsl:template match="@* | node()">
            <xsl:copy>
                <xsl:apply-templates select="@* | node()"/>
            </xsl:copy>
        </xsl:template>
        <xsl:template match="RENAME">
            <DONE>
                <xsl:apply-templates select="@* | node()"/>
            </DONE>
        </xsl:template>
        <xsl:template match="@RENAME">
            <xsl:attribute name="DONE">
                <xsl:value-of select="."/>
            </xsl:attribute>
        </xsl:template>
    </xsl:stylesheet>
    

    Output against your sample:

    <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>
    
    0 讨论(0)
  • 2020-12-18 12:51

    This could work also, but it I believe the other answer is better. Just thought I'd offer my two cents.

    <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>
    
    0 讨论(0)
提交回复
热议问题