[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Grouping help
Hi All, I have a flat file that I am trying to add some hierarchy to. Here is an example of the input: <?xml version="1.0" encoding="UTF-8"?> <root> <item level="2" number="A.">General</item> <item level="3" number="(1)">This task gives...</item> <item level="4" number="(a)">Replace the water...</item> <item level="4" number="(b)">Replace the barrier...</item> <item level="4" number="(c)">Replace the...</item> <item level="3" number="(2)">This task takes...</item> <note type="note" position="1">NOTE:</note> <note type="note" position="2">Refer to typical...</note> <item level="2" number="B.">References</item> <item level="2" number="C.">Tools/Equipment</item> <note type="note" position="1">NOTE:</note> <note type="note" position="2">When more than one...</note> <effectivity>Effective on:</effectivity> <effectivity>Effective on:</effectivity> <item level="2" number="D.">Consumable Materials</item> <item level="2" number="E.">Location Zones</item> <item level="2" number="F.">Procedure</item> <item level="3" number="(1)">Do a check...</item> <item level="3" number="(2)">Repair or replace...</item> <item level="3" number="(3)">Do this task...</item> <item level="3" number="(4)">Do a check...</item> <item level="3" number="(5)">Replace the sealant...</item> <item level="3" number="(6)">Do a check of...</item> <item level="4" number="(a)">Replace the water...</item> <item level="4" number="(b)">Replace the barrier...</item> <item level="4" number="(c)">Replace the...</item> <item level="3" number="(7)">Assemble the...</item> <item level="3" number="(8)">Seal all of the...</item> <note type="caution" position="1">CAUTION:</note> <note type="caution" position="2">MAKE SURE...</note> <item level="3" number="(9)">Apply a layer of grease as follows: <para>Apply a layer of...</para></item> <note type="note" position="1">NOTE:</note> <note type="note" position="2">The grease can...</note> <item level="3" number="(10)">Use the <b>vacuum cups</b> ...</item> </root> My output is not quite right: <?xml version="1.0" encoding="UTF-8"?> <task> <pretopic lbl="A."> <title>General</title> <list1> <l1item lbl="(1)">This task gives...</l1item> <list2> <l2item lbl="(a)">Replace the water...</l2item> </list2> </list1> </pretopic> <pretopic lbl="B."> <title>References</title> </pretopic> <pretopic lbl="C."> <title>Tools/Equipment</title> <note type="note" position="1">NOTE:</note> <note type="note" position="2">When more than one...</note> <effectivity>Effective on:</effectivity> <effectivity>Effective on:</effectivity> </pretopic> <pretopic lbl="D."> <title>Consumable Materials</title> </pretopic> <pretopic lbl="E."> <title>Location Zones</title> </pretopic> <pretopic lbl="F."> <title>Procedure</title> <list1> <l1item lbl="(1)">Do a check...</l1item> <l1item lbl="(2)">Repair or replace...</l1item> <l1item lbl="(3)">Do this task...</l1item> <l1item lbl="(4)">Do a check...</l1item> <l1item lbl="(5)">Replace the sealant...</l1item> <l1item lbl="(6)">Do a check of...</l1item> <list2> <l2item lbl="(a)">Replace the water...</l2item> </list2> </list1> </pretopic> </task> Here is my current stylesheet: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:math="http://www.w3.org/2005/xpath-functions/math" exclude-result-prefixes="xs math" version="3.0" expand-text="yes"> <xsl:output indent="yes"/> <xsl:template match="/root"> <task> <xsl:for-each-group select="*" group-starting-with="item[@level='2']"> <xsl:apply-templates select="." mode="group"/> </xsl:for-each-group> </task> </xsl:template> <xsl:template match="item[@level='2']" mode="group"> <pretopic lbl="{@number}"> <title>{.}</title> <xsl:for-each-group select="current-group() except ." group-starting-with="item[@level='3'][@number='(1)']"> <xsl:choose> <xsl:when test="self::item[@number='(1)']"> <list1> <xsl:apply-templates select="." mode="group"/> </list1> </xsl:when> <xsl:otherwise> <xsl:apply-templates select="." mode="group"/> </xsl:otherwise> </xsl:choose> </xsl:for-each-group> </pretopic> </xsl:template> <xsl:template match="item[@level='3']" mode="group"> <l1item lbl="{@number}">{.}</l1item> <xsl:for-each-group select="current-group() except ." group-starting-with="item[@level='4'][@number='(a)']"> <xsl:choose> <xsl:when test="self::item[@number='(a)']"> <list2> <xsl:apply-templates select="." mode="group"/> </list2> </xsl:when> <xsl:otherwise> <xsl:apply-templates select="." mode="group"/> </xsl:otherwise> </xsl:choose> </xsl:for-each-group> </xsl:template> <xsl:template match="item[@level='4']" mode="group"> <l2item lbl="{@number}">{.}</l2item> </xsl:template> <xsl:template match="*" mode="group"> <xsl:copy-of select="current-group()"/> </xsl:template> </xsl:stylesheet> This example is a modified version of Mike's XHTML version on page 340 of his book. Any help would be appreciated. Thank you. Rick
|
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
|