Description
The functx:add-attributes function takes one or more XML element nodes, along with a sequence of attribute names and a sequence of attribute values, and returns a newly constructed element with those attributes added. The attribute names and values are positionally related, i.e. the first attribute name corresponds to the first attribute value, the second name to the second value, etc. It leaves all the original attributes and content of the element. Unlike the functx:add-or-update-attributes function, if it already has an attribute with the same name of one of $attrNames , its original value is retained and the value in $attrValues is ignored.
Each name must be specified as an xs:QName value. QNames can be constructed with calls to the xs:QName type constructor or the fn:QName function, as shown in the examples.
Arguments and Return TypeName | Type | Description |
$elements |
element()* |
the element(s) to which you wish to add the attribute |
$attrNames |
xs:QName* |
the name(s) of the attribute(s) to add |
$attrValues |
xs:anyAtomicType* |
the value(s) of the attribute(s) to add |
return value |
element()* |
XSLT Function DeclarationSee XQuery definition. | <xsl:function name="functx:add-attributes" as="element()?"
xmlns:functx="http://www.functx.com">
<xsl:param name="elements" as="element()*"/>
<xsl:param name="attrNames" as="xs:QName*"/>
<xsl:param name="attrValues" as="xs:anyAtomicType*"/>
<xsl:for-each select="$elements">
<xsl:variable name="element" select="."/>
<xsl:copy>
<xsl:for-each select="$attrNames">
<xsl:variable name="seq" select="position()"/>
<xsl:if test="not($element/@*[node-name(.) = current()])">
<xsl:attribute name="{.}"
namespace="{namespace-uri-from-QName(.)}"
select="$attrValues[$seq]"/>
</xsl:if>
</xsl:for-each>
<xsl:copy-of select="@*|node()"/>
</xsl:copy>
</xsl:for-each>
</xsl:function>
|
Examples<xsl:stylesheet xmlns:new="http://new">... | <xsl:variable name="in-xml" as="item()*"> | | <in-xml>
<a>x</a>
<b att1="x">x</b>
</in-xml> |
| </xsl:variable> |
XPath Example | Results |
---|
functx:add-attributes(
$in-xml/a, xs:QName('att1'), 1) |
<a att1="1">x</a> |
functx:add-attributes(
$in-xml/a,
(xs:QName('att1'),xs:QName('att2')),
(1,2)) |
<a att1="1" att2="2">x</a> |
functx:add-attributes(
$in-xml/b,
(xs:QName('att1'),xs:QName('att2')),
(1,2)) |
<b att1="x" att2="2">x</b> |
functx:add-attributes(
$in-xml/a,
xs:QName('new:att1'),
1) |
<a xmlns:new="http://new" new:att1="1">x</a> |
functx:add-attributes(
$in-xml/a,
QName('http://new','new:att1'),
1) |
<a xmlns:new="http://new" new:att1="1">x</a> |
See AlsoHistory |
Recommended Reading:
|