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?
I will have a lot of child nodes in person
I will have more attributes in the person.
You cannot - 'variables' in XSLT are actually more like constants in other languages, they cannot change value.
XSLT/XPath Reference: XSLT elements, EXSLT functions, XPath functions, XPath axes. The local-name function returns a string representing the local name of the first node in a given node-set.
XSLT <xsl:text> The <xsl:text> element is used to write literal text to the output. Tip: This element may contain literal text, entity references, and #PCDATA.
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
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With