Subject: RE: XSLT 2.0 & Grouping for-each-group - RESEND
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Fri, 8 Aug 2003 12:19:23 +0100
|
Perhaps you could replace
xsl:for-each group group-starting-with="*[@StyleName='DIVISION']"
with
xsl:variable name="next" select="*[1]/@StyleName"
xsl:for-each-group group-starting-with="*[@StyleName=$next]"
This also has the advantage that it's the same code at all levels.
Michael Kay
> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of Mark Brand
> Sent: 07 August 2003 10:41
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: XSLT 2.0 & Grouping for-each-group - RESEND
>
>
> * Micheal Kay
> <snip>
> But I may have misunderstood the requirement. What do you
> want to happen if there isn't a DIVISION item in the group? </snip>
>
> * Mark Brand
>
> Hi Michael
>
> Thanks for the response, the incoming data will follow the
> hierachy below (Figure 1) and for this case the nested
> for-each-group works well.
>
> But the only guarentee about the data is the order. It is
> not guarenteed that a particular level will be there. For
> example, a SUB-DIVISION level may be missing as per (Figure 2).
>
> The nested for-each-group solution for the SUB-DIVISION
> level ignores the fact that there is no SUB-DIVISION entry in
> the group and processes the group entries anyway.
>
> I thought I could get around this with a check on the
> for-each-group to see if (for example) the SUB-DIVISION level
> was in the current-group(), but that won't work because you
> still need to process the for-each-group because of the down
> level stuff.
>
> Another issue is that, there are some other elements that are
> not part of the hierachy but can appear before or after any
> of the hierachial elements. For example (Figure 3) you may
> have a <NOTE> after a <DIVISION>
>
> <PART>
> <DIVISION>
> <NOTE/>
> <REGULATION>
> <NOTE/>
> </REGULATION>
> </DIVISION>
> </PART>
>
>
> (Figure 1)
> PART
> DIVISION
> SUBDIVISION
> REGULATION
> SUBREGULATION
> PARAGRAPH
> SUB-PARAGRAPH
>
> SUB-SUB-PARAGRAPH
>
>
> (Figure 2)
> PART
> DIVISION
> REGULATION
> SUBREGULATION
> PARAGRAPH
> SUB-PARAGRAPH
>
> SUB-SUB-PARAGRAPH
>
>
> (Figure 3)
>
> <PART>
> <DIVISION>
> <NOTE/>
> <REGULATION>
> <NOTE/>
> </REGULATION>
> </DIVISION>
> </PART>
>
>
> 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="*[@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()/*[@StyleName='DIVISION']">
> > <xsl:for-each-group select="current-group() except "."
> > group-starting-with="*[@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="{@StyleName}">
> >> <xsl:copy-of select="child::node()"/>
> >> <xsl:for-each-group select="current-group() except ."
> >> group-starting-with="*[@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
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|