xsl-list
[Top] [All Lists]

Re: XSLT 2.0 & Grouping for-each-group - RESEND

2003-08-07 02:41:43
* Michael Kay

<snip>

Clearly the XSLT must be well-formed XML, so the closing tags have to be
properly nested, and they will then also be properly nested in the
result document. In fact, it's impossible to output a document in which
the tags aren't properly nested! So I don't think I understand the
question.

</snip>

Hi Micheal
I am being vague, because i don't understand all the issues - this is my first 
transform. So
then, I don't think then I understand your second option then. This is the code that i wrote below (Listing 1)

(Listing 1)
<?xml version="1.0"?>
<xsl:transform
        xmlns:xs="http://www.w3.org/2001/XMLSchema";
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
        xmlns:f="http://www.elegalpublishing.com/namespace";
        version="2.0"
        exclude-result-prefixes="f xs">

        <xsl:template match="Document/DocumentBody">
                <REGULATION>
                <xsl:for-each-group select="Paragraph" 
group-starting-with="*[(_at_)StyleName='PART']">
                        <xsl:apply-templates select="."/>
                </xsl:for-each-group>
                </REGULATION>
        </xsl:template>

        <xsl:template match="Paragraph">
                 /* This is where opening ELEMENT should go EG. <PART> or 
<DIVISION> */
                /* and but where does the closing element go EG  </PART> or 
</DIVISION> */
                    <xsl:copy-of select="child::node()"/>
                    <xsl:for-each-group select="current-group() except ." 
group-starting-with="*[(_at_)StyleName=f:child(@StyleName)]">
                                <xsl:apply-templates select="."/>
                        </xsl:for-each-group>
        </xsl:template>

<xsl:function name="f:child"> <xsl:param name="level"/>
                        <xsl:choose>
                                <xsl:when test="$level='PART'">
                                        DIVISION
                                </xsl:when>

                                <xsl:when test="$level='DIVISION'">
                                        REGULATION
                                </xsl:when>

                                <xsl:when test="$level='REGULATION'">
                                        SUB-REGULATION
                                </xsl:when>
                        </xsl:choose>
        </xsl:function>
</xsl:transform>

Thanks Mark Brand






Michael Kay wrote:

* Mark Brand

Hi

I have further questions on the fragments posted earlier. I did try implementing both options but had some questions ...

Q1. <snip> <xsl:for-each-group select="current-group() except "." group-starting-with="*[(_at_)StyleName='DIVISION']">
</snip>

With this line of code, i found that it would execute (enter the for-each-group loop) even if there wasn't a DIVISION item in the group. How do I stop the loop being entered if the group-starting-with entry is not in the list. I have tried an if statement after the loop has been entered but it is too late then for my purposes.

This reads to me like

<xsl:if test="current-group()/*[(_at_)StyleName='DIVISION']">
<xsl:for-each-group select="current-group() except "." group-starting-with="*[(_at_)StyleName='DIVISION']">
...
</xsl:if>

But I may have misunderstood the requirement. What do you want to happen
if there isn't a DIVISION item in the group?

Q2. <snip>
 <Part Category="{(_at_)StyleName}">
   <xsl:copy-of select="child::node()"/>
   <xsl:for-each-group select="current-group() except ."
      group-starting-with="*[(_at_)StyleName=f:child(@StyleName)]">
     <xsl:apply-templates select="."/>
</snip>

With this piece of code from the second option where would you put the closing tags, where-ever i put them they would all output after everything else instead of in a nested fashion.

Clearly the XSLT must be well-formed XML, so the closing tags have to be
properly nested, and they will then also be properly nested in the
result document. In fact, it's impossible to output a document in which
the tags aren't properly nested! So I don't think I understand the
question.

Michael Kay


XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list