|
Subject: Re: [xsl] Selecting non-duplicate nodes From: Michael Müller-Hillebrand <mmh@xxxxxxxxxxxxx> Date: Wed, 12 Oct 2011 20:01:05 +0200 |
Am 12.10.2011 um 17:33 schrieb Mark:
> My question now is: how can I change this stylesheet so that for the listed
input, no <FormatButtons> in the output contains more than one copy of a
<Format> with the same attribute name and value? That is, where the current
output is, for example:
>
> <FormatPage souvenir-sheet="365">
> <FormatButtons>
> <Formats se-tenant="365"/>
> <Formats se-tenant="365"/>
> <Formats coupon="367"/>
> <Formats coupon="368"/>
> </FormatButtons>
> </FormatPage>
Mark,
If a node in your sample is a duplicate of another node can be retrieved from
the attribute names and their values. So IMO the grouping key could be a
serialization of them. In other words, we look at the source as if we were a
text processor, like this:
<xsl:template match="FormatButtons">
<xsl:copy>
<xsl:for-each-group select="Formats"
group-by="string-join(
for $i in 1 to count(@*)
return concat(name(@*[$i]), '=', @*[$i]), ' ')">
<xsl:apply-templates select="."/>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
In XML the order of attributes is usually irrelevant, but the above solution
does not ignore order. But it works with any number of attributes.
- Michael M|ller-Hillebrand
--
_______________________________________________________________
Michael M|ller-Hillebrand: Dokumentation Technology
Adobe Certified Expert, FrameMaker
Consulting and Training, FrameScript, XML/XSL, Unicode
Blog [de]: http://cap-studio.de/
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Selecting non-duplicate n, Mark | Thread | Re: [xsl] Selecting non-duplicate n, Mark |
| Re: [xsl] Selecting non-duplicate n, Mark | Date | Re: [xsl] Selecting non-duplicate n, Mark |
| Month |