Subject: RE: [xsl] grouping list items by attribute From: Lynn Alford <lynn.alford@xxxxxxxxxx> Date: Wed, 05 Oct 2005 15:56:09 +1000 |
I'm very close to the results I'd like but am hoping for a few pointers to finish this part of the transformation off. The answer has to be used by Xalan - so it must be an xslt1 solution.
Forgive the length of the post and thanks to anyone who can help with this. Basically, I can find the list items, determine correctly if they are ordered or not. But it's not correctly traversing the list so items may appear at the same level as sub-items.
<?xml version="1.0" encoding="UTF-8"?> <flexiondoc xmlns="http://www.outsideinsdk.com/xmlns/flexiondoc5_1">
<content> <wp.doc id="ID20" object_id="2147483648"> <wp.section> <tx.p style="ID1d9">List test</tx.p> <tx.list style="ID27e"> <tx.li level="0" number="1. "><tx.p>Ordered - list item</tx.p></tx.li> <tx.li level="1" number="a. "><tx.p>Nested list item</tx.p></tx.li> <tx.li level="1" number="b. "><tx.p>Nested list item</tx.p></tx.li> <tx.li level="2" number="' "><tx.p>Nested nested list item</tx.p></tx.li> <tx.li level="2" number="' "><tx.p>And yet another</tx.p></tx.li> <tx.li level="0" number="2. "><tx.p>Ordered list item</tx.p></tx.li> <tx.li level="0" number="3. "><tx.p>Ordered list item</tx.p></tx.li> </tx.list>
</wp.section> </wp.doc> </content> </flexiondoc>
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="#default fl" xmlns:fl="http://www.outsideinsdk.com/xmlns/flexiondoc5_1"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:preserve-space elements="fl:tx.p"/> <xsl:template match="/"> <out> <xsl:apply-templates/> </out> </xsl:template>
<xsl:template match="fl:tx.p"> <para> <xsl:value-of select="."/> </para> </xsl:template> <xsl:template match="fl:tx.li"/> <xsl:template match="fl:tx.li[not(preceding-sibling::*[1][self::fl:tx.li])]"> <xsl:apply-templates select="." mode="new-list"/> </xsl:template> <xsl:template match="fl:tx.li" mode="new-list"> <xsl:choose> <xsl:when test="contains(@number,'.') or contains(@number,')')"> <orderedlist> <xsl:apply-templates select="." mode="in-list"/> </orderedlist> </xsl:when> <xsl:otherwise> <itemizedlist> <xsl:apply-templates select="." mode="in-list"/> </itemizedlist> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="fl:tx.li" mode="in-list"> <listitem level="{@level}" number="{@number}"> <xsl:apply-templates select="child::*"/> </listitem> <xsl:choose> <xsl:when test="@level >= following-sibling::*[1]/@level"> <xsl:apply-templates select="following-sibling::*[1][self::fl:tx.li]" mode="in-list"/> </xsl:when> <xsl:when test="@level < following-sibling::*[1]/@level"> <xsl:apply-templates select="following-sibling::*[1][self::fl:tx.li]" mode="new-list"/> </xsl:when>
</xsl:choose> </xsl:template> </xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?> <out> <para>List test</para> <orderedlist> <listitem level="0" number="1. "> <para>Ordered - list item</para> </listitem> <orderedlist> <listitem level="1" number="a. "> <para>Nested list item</para> </listitem> <listitem level="1" number="b. "> <para>Nested list item</para> </listitem> <itemizedlist> <listitem level="2" number="' "> <para>Nested nested list item</para> </listitem> <listitem level="2" number="' "> <para>And yet another</para> </listitem> <listitem level="0" number="2. "> <para>Ordered list item</para> </listitem> <listitem level="0" number="3. "> <para>Ordered list item</para> </listitem> </itemizedlist> </orderedlist> </orderedlist> </out>
<?xml version="1.0" encoding="UTF-8"?> <out> <para>List test</para> <orderedlist> <listitem level="0" number="1. "> <para>Ordered - list item</para> </listitem> <orderedlist> <listitem level="1" number="a. "> <para>Nested list item</para> </listitem> <listitem level="1" number="b. "> <para>Nested list item</para> </listitem> <itemizedlist> <listitem level="2" number="' "> <para>Nested nested list item</para> </listitem> <listitem level="2" number="' "> <para>And yet another</para> </listitem> </itemizedlist> </orderedlist> <listitem level="0" number="2. "> <para>Ordered list item</para> </listitem> <listitem level="0" number="3. "> <para>Ordered list item</para> </listitem> </orderedlist> </out>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] grouping list items by at, Michael Kay | Thread | Re: [xsl] grouping list items by at, Jon Gorman |
Re: [xsl] Simple (external XML) int, knocte | Date | RE: [xsl] comparisons between strin, Jarno.Elovirta |
Month |