[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Grouping help

Subject: Grouping help
From: "rick@xxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 22 Jul 2022 17:15:21 -0000
 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

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.