How do I rename an attribute using XSLT?

前端 未结 2 1826
谎友^
谎友^ 2020-12-16 15:33

I have an xml like this:


I want to transform it to



        
相关标签:
2条回答
  • 2020-12-16 16:09

    This should do it, not quite sure of the {name()} but you could replace that with "person"

    > <xsl:template match="person">
    >       <xsl:element name="{name()}">
    >         <xsl:attribute name="id">
    >           <xsl:value-of select="@name"/>
    >         </xsl:attribute>
    >         <xsl:attribute name="gender">
    >           <xsl:value-of select="@gender"/>
    >         </xsl:attribute>
    >       </xsl:element>
    >     </xsl:template>
    
    0 讨论(0)
  • 2020-12-16 16:11

    This is very simple: Use the identity transform and create a template that transforms the name attribute:

    <xsl:template match="node()|@*">
      <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
      </xsl:copy>
    </xsl:template>
    
    <xsl:template match="@name">
       <xsl:attribute name="id">
          <xsl:value-of select="."/>
       </xsl:attribute>
    </xsl:template>
    

    This will leave everything in the document except for name attributes exactly as it is. If you only want to change the name attribute on person elements, put a more restrictive XPath in the template's match attribute, e.g. person/@name.

    0 讨论(0)
提交回复
热议问题