Re: [xsl] Best practice for group-adjacent with quasi-null grouping key?

Subject: Re: [xsl] Best practice for group-adjacent with quasi-null grouping key?
From: "Eliot Kimber ekimber@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 26 Apr 2016 19:27:57 -0000
Or you can just add some constant string so you don't have empty strings:

 group-adjacent="'x-'||@role"

Can make debugging easier if you decide to report the grouping key.

Cheers,

E.
----
Eliot Kimber, Owner
Contrext, LLC
http://contrext.com




On 4/26/16, 1:47 PM, "David Sewell dsewell@xxxxxxxxxxxx"
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

>Yes, that seems like the most elegant solution, since for my purposes an
>empty
>string and a null attribute are synonymous. Thanks!
>
>On Tue, 26 Apr 2016, Martin Honnen martin.honnen@xxxxxx wrote:
>
>> On 26.04.2016 20:39, David Sewell dsewell@xxxxxxxxxxxx wrote:
>>> (Following assumes XSLT 2.0)
>>>
>>> I don't use the @group-adjacent form of <xsl:for-each-group> often
>>> enough to be a master of it. I just ran into the problem that an empty
>>> sequence is not allowed as the result of evaluating the group-adjacent
>>> expression. Given data like
>>>
>>> <contributor role="author">Joe Jones</contributor>
>>> <contributor role="author">Mary Mitchell</contributor>
>>> <contributor role="editor">Betty Berkeley</contributor>
>>> <contributor role="editor">Peter Parker</contributor>
>>>
>>> my first instinct was to use
>>>   <xsl:for-each-group select="contributor" group-adjacent="@role">
>>>
>>> but I got a run-time error because the @role is not always present in
>>>my
>>> data. So I revised to
>>>
>>>   <xsl:for-each-group select="contributor" group-adjacent="if (@role)
>>>     then string(@role) else 'false'">
>>>
>>> which give the desired results. But is there a better general strategy,
>>> maybe using boolean false() as the grouping value, and then being sure
>>> to cast current-grouping-key() as a string whenever a string comparison
>>> is needed?
>>
>>
>> I would be inclined to simply use
>>
>>   group-adjacent="string(@role)"
>>
>> unless you could have both <el role="">...</el> and <el>...</el> and
>> would need to distinguish them.
>>
>>
>> ---
>> Diese E-Mail wurde von Avast Antivirus-Software auf Viren gepr|ft.
>> https://www.avast.com/antivirus
>>
>>
>
>--
>David Sewell, Editorial and Technical Manager
>ROTUNDA, The University of Virginia Press
>PO Box 400318, Charlottesville, VA 22904-4314 USA
>Email: dsewell@xxxxxxxxxxxx   Tel: +1 434 924 9973
>Web: http://rotunda.upress.virginia.edu/

Current Thread