[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Grouping lists from flat to nested
I just solved it - thank you Martin, you gave me the direction how to do this! Kind regards, Stefanie On Mon, Jan 31, 2011 at 4:47 PM, Stefanie Haupt <st.haupt@xxxxxxxxx> wrote: > Dear Martin, > > this looks great, thank you! B - the only downside is that the input to > this grouping attempt is a variable containing the input. So I fear I > can't use <template match="text"> here. I think I would need a new > transformation document in the pipeline with this attempt - which I > would love to avoid. - Or am I mistaken? > > Kind regards, > Stefanie > > On Mon, Jan 31, 2011 at 3:05 PM, Martin Honnen <Martin.Honnen@xxxxxx> wrote: > >> >> Based on your explanation and the required result I think you should rather >> use group-adjacent than group-starting-with. >> Here is an example stylesheet: >> >> <xsl:stylesheet >> B xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >> B xmlns:xs="http://www.w3.org/2001/XMLSchema" >> B xmlns:mf="http://example.com/mf" >> B version="2.0" >> B exclude-result-prefixes="xs mf"> >> >> B <xsl:strip-space elements="*"/> >> B <xsl:output indent="yes"/> >> >> B <xsl:function name="mf:group" as="node()*"> >> B B <xsl:param name="nodes" as="node()*"/> >> B B <xsl:param name="level" as="xs:integer"/> >> B B <xsl:if test="$nodes"> >> B B B <list type="ul"> >> B B B B <xsl:for-each-group select="$nodes" >> group-adjacent="boolean(self::*[@level = $level])"> >> B B B B B <xsl:choose> >> B B B B B B <xsl:when test="current-grouping-key()"> >> B B B B B B B <xsl:apply-templates select="current-group()"/> >> B B B B B B </xsl:when> >> B B B B B B <xsl:otherwise> >> B B B B B B B <xsl:sequence select="mf:group(current-group(), $level + 1)"/> >> B B B B B B </xsl:otherwise> >> B B B B B </xsl:choose> >> B B B B </xsl:for-each-group> >> B B B </list> >> B B </xsl:if> >> B </xsl:function> >> >> B <xsl:template match="@* | node()"> >> B B <xsl:copy> >> B B B <xsl:apply-templates select="@*, node()"/> >> B B </xsl:copy> >> B </xsl:template> >> >> B <xsl:template match="item[@level]"> >> B B <item> >> B B B <xsl:apply-templates/> >> B B </item> >> B </xsl:template> >> >> B <xsl:template match="test"> >> B B <xsl:copy> >> B B B <xsl:for-each-group select="*" group-adjacent="boolean(self::item)"> >> B B B B <xsl:choose> >> B B B B B <xsl:when test="current-grouping-key()"> >> B B B B B B <xsl:sequence select="mf:group(current-group(), 0)"/> >> B B B B B </xsl:when> >> B B B B B <xsl:otherwise> >> B B B B B B <xsl:apply-templates select="current-group()"/> >> B B B B B </xsl:otherwise> >> B B B B </xsl:choose> >> B B B </xsl:for-each-group> >> B B </xsl:copy> >> B </xsl:template> >> >> </xsl:stylesheet> >> >> When applied to the input >> >> <test> >> <p level="0">Der als Filmregisseur B <hi rend="bo">Alan Smithee</hi> >> ist ein.. </p> >> <p level="0">Das Pseudonym.. .</p> >> <p level="0">Der Regisseur...</p> >> <head2 level="0">Wissenswertes</head2> >> <item level="0" type="ul">Alternative Schreibweisen..</item> >> <item level="0" type="ul">Eine alternative Theorie...</item> >> <item level="0" type="ul">Zu den ... </item> >> <item level="1" type="ul">Don B </item> >> <item level="1" type="ul">David Lynch </item> >> <item level="1" type="ul">Chris Christensen </item> >> <item level="1" type="ul">Stuart Rosenberg</item> >> <item level="1" type="ul">Richard C. Sarafian</item> >> <item level="1" type="ul">Dennis Hopper B </item> >> <item level="2" type="ul"> level 3 ulitem</item> >> <item level="1" type="ul">Arthur Hiller (fC<r ), </item> >> <item level="1" type="ul">Rick Rosenthal (Birds II) und </item> >> <item level="1" type="ul">Kevin Yagher </item> >> <item level="0" type="ul">Zu den Drehbuchautoren </item> >> <item level="1" type="ul">Sam Raimi und Ivan Raimi </item> >> <head2 level="0">Weblinks</head2> >> </test> >> >> >> Saxon 9.3 outputs >> >> <test> >> B <p level="0">Der als Filmregisseur B <hi rend="bo">Alan Smithee</hi> >> ist ein.. </p> >> B <p level="0">Das Pseudonym.. .</p> >> B <p level="0">Der Regisseur...</p> >> B <head2 level="0">Wissenswertes</head2> >> B <list type="ul"> >> B B B <item>Alternative Schreibweisen..</item> >> B B B <item>Eine alternative Theorie...</item> >> B B B <item>Zu den ... </item> >> B B B <list type="ul"> >> B B B B <item>Don B </item> >> B B B B <item>David Lynch </item> >> B B B B <item>Chris Christensen </item> >> B B B B <item>Stuart Rosenberg</item> >> B B B B <item>Richard C. Sarafian</item> >> B B B B <item>Dennis Hopper B </item> >> B B B B <list type="ul"> >> B B B B B B <item> level 3 ulitem</item> >> B B B B </list> >> B B B B <item>Arthur Hiller (fbbr ), </item> >> B B B B <item>Rick Rosenthal (Birds II) und </item> >> B B B B <item>Kevin Yagher </item> >> B B B </list> >> B B B <item>Zu den Drehbuchautoren </item> >> B B B <list type="ul"> >> B B B B <item>Sam Raimi und Ivan Raimi </item> >> B B B </list> >> B </list> >> B <head2 level="0">Weblinks</head2> >> </test> >> >> >> >> >> -- >> >> B B B B Martin Honnen >> B B B B http://msmvps.com/blogs/martin_honnen/ >> >> > > > > -- > Stefanie Haupt, M.A. > -- Stefanie Haupt, M.A.
|
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
|