Re: [xsl] Grouping help

Subject: Re: [xsl] Grouping help
From: "Dimitre Novatchev dnovatchev@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 22 Jul 2022 18:04:41 -0000
You missed to tell us what the  desired output must be ...

On Fri, Jul 22, 2022 at 10:15 AM rick@xxxxxxxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

> 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 Mikebs XHTML version on page 340 of
> his book. Any help would be appreciated. Thank you.
>
>
>
> Rick
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/782854> (by
> email <>)
>


--
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
Never fight an inanimate object
-------------------------------------
To avoid situations in which you might make mistakes may be the
biggest mistake of all
------------------------------------
Quality means doing it right when no one is looking.
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play
-------------------------------------
To achieve the impossible dream, try going to sleep.
-------------------------------------
Facts do not cease to exist because they are ignored.
-------------------------------------
Typing monkeys will write all Shakespeare's works in 200yrs.Will they write
all patents, too? :)
-------------------------------------
Sanity is madness put to good use.
-------------------------------------
I finally figured out the only reason to be alive is to enjoy it.

Current Thread