开发者

How do I rename an attribute using XSLT?

开发者 https://www.devze.com 2022-12-27 19:29 出处:网络
I have an xml like this: <person name=\"foo\" gender = \"male\" /> I want to transform it to <person id=\"foo\" gender=\"male\" />

I have an xml like this:

<person name="foo" gender = "male" />

I want to transform it to

<person id="foo" gender="male" />

Is there a way to do that using XSLT?


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.


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

精彩评论

暂无评论...
验证码 换一张
取 消