- From: Norman Walsh <ndw@nwalsh.com>
- Date: Tue, 30 Sep 2008 12:13:03 -0400
- To: XProc Dev <xproc-dev@w3.org>
- Message-ID: <m2tzbxr4s0.fsf@nwalsh.com>
James Garriss <james@garriss.org> writes:
> It seems that p:add-attribute and p:set-attribute have overlapping
> functionality with p:label-elements. Can someone plz differentiate these
> for me?
p:add-attribute adds a single attribute with a single, fixed value to
a set of matching elements.
p:set-attributes adds a collection of attributes, each with a single, fixed
value to a set of matching elements.
In this regard, p:add-attribute is just a convenience step for those
cases where you want to add a single attribute.
<p:add-attribute match="h:div"
attribute-name="class"
attribute-value="orig.div"/>
is "syntactic sugar" for
<p:set-attributes match="h:div">
<p:input port="attributes">
<p:inline>
<element-name-doesn't-matter class="org.div"/>
</p:inline>
</p:input>
</p:set-attributes>
In either case, if you started with
<h:div>
<h:div>
<p>text</p>
</h:div>
</h:div>
you'd get
<h:div class='org.div'>
<h:div class='org.div'>
<p>text</p>
</h:div>
</h:div>
If you want to set two or more attributes, then p:set-attributes is easier.
What's different about p:label-elements is that the attribute *value*
can vary on a per-element basis.
<p:label-elements match="h:div"
attribute="id"
label="concat('ID_', $p:index)"/>
would turn the example above into
<h:div id="ID_1">
<h:div id="ID_2">
<p>text</p>
</h:div>
</h:div>
Clear(er)?
Be seeing you,
norm
--
Norman Walsh <ndw@nwalsh.com> | The function of the imagination is not
http://nwalsh.com/ | to make strange things settled, so much
| as it is to make settled things
| strange.--G. K. Chesterton
Received on Tuesday, 30 September 2008 16:13:50 UTC