Reputation: 5165
For example, I want to add an attribute to this node:
<Party>
So it will look like:
<Party role="this should be set using XPath">
Attribute value has to come from XPath.
The following will not work :)
<Party role=<xsl:value-of select="some/xpath/path"/>>
How to do that?
Upvotes: 41
Views: 47205
Reputation: 519
you can try the below sample:
<xsl:for-each select="YOUR_SELECT_PATH">
<a>
<Party> <xsl:attribute name="role"><xsl:value-of select="@source"/></xsl:attribute> </Party>
<xsl:value-of select="."/>
</a>
</xsl:for-each>
Here I am setting the attribute role to a xml node Party.
Upvotes: 8
Reputation: 167571
<xsl:template match="Party">
<Party role="{some/xpath/path}">
<xsl:apply-templates select="@* | node()"/>
</Party>
</xsl:template>
should do. As an alternative
<xsl:template match="Party">
<xsl:copy>
<xsl:attribute name="role" select="some/xpath/path"/>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
Of course the apply-templates is only necessary if there are attribute and/or child nodes you also want to be processed (for example to be copied by an identity transformation template).
Upvotes: 14
Reputation: 122374
Attributes of literal result elements support the attribute value template syntax, using {}
:
<Party role="{some/xpath/path}">
Upvotes: 56