|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: how to group nodes by id?
--- G. Ken Holman wrote:
>
> At 2002-12-02 07:48 -0800, Artur Matysiak wrote:
> > does anybody know how to convert the following XML:
>
> Below is a solution using variables and a solution using keys. Take
> your
> pick. Grouping algorithms are documented in the FAQ ... what aspects
> of
> the documentation did you find confusing?
>
> I hope this helps.
>
> ...................... Ken
>
> T:\ftemp>type artur.xml
> <elems>
> <elem id="1">
> <elem id="1"/>
> </elem>
> <elem id="1">
> <elem id="2"/>
> </elem>
> <elem id="2">
> <elem id="1"/>
> </elem>
> <elem id="2">
> <elem id="2"/>
> </elem>
> </elems>
>
[solution with xsl:variable skipped]
> T:\ftemp>type artur2.xsl
> <?xml version="1.0" encoding="iso-8859-1"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> version="1.0">
>
> <xsl:output indent="yes"/>
>
> <xsl:key name="elems" match="elem[elem]" use="@id"/>
>
> <xsl:template match="elems">
> <elems>
> <xsl:for-each
> select="elem[generate-id(.)=generate-id(key('elems',@id))]">
> <xsl:copy>
> <xsl:copy-of select="@*"/>
> <xsl:copy-of select="key('elems',@id)/node()"/>
> </xsl:copy>
> </xsl:for-each>
> </elems>
> </xsl:template>
>
> </xsl:stylesheet>
>
> T:\ftemp>saxon artur.xml artur2.xsl
> <?xml version="1.0" encoding="utf-8"?>
> <elems>
> <elem id="1">
>
> <elem id="1"/>
>
>
> <elem id="2"/>
>
> </elem>
> <elem id="2">
>
> <elem id="1"/>
>
>
> <elem id="2"/>
>
> </elem>
> </elems>
> T:\ftemp>
>
> T:\ftemp>
>
This solution will work only if the child "element"s have all unique
"id" attributes.
For example, when applied on the following source xml:
<elems>
<elem id="1">
<elem id="1"/>
<elem id="2"/> </elem>
<elem id="1">
<elem id="2"/> </elem>
<elem id="1">
<elem id="2"/> </elem>
<elem id="1">
<elem id="3"/> </elem>
<elem id="2">
<elem id="1"/> </elem>
<elem id="2">
<elem id="2"/> </elem>
</elems>
the result of the transformation is:
<?xml version="1.0" encoding="utf-8"?>
<elems>
<elem id="1">
<elem id="1"/>
<elem id="2"/>
<elem id="2"/>
<elem id="2"/>
<elem id="3"/>
</elem>
<elem id="2">
<elem id="1"/>
<elem id="2"/>
</elem>
</elems>
Probably I misunderstand the problem, but I think that the
re-structuring had to be accompanied by elimination of elements with
non-unique "id" attributes.
=====
Cheers,
Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL
__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








