[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
RE: [xsl] XSLT 2.0 & Grouping for-each-group - RESEND
Subject: RE: [xsl] 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: [xsl] 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
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] XSLT 2.0 & Grouping for-, Mark Brand | Thread | Re: [xsl] XSLT 2.0 & Grouping for-, Mark Brand |
RE: [xsl] XSLT document() function!, Michael Kay | Date | Re: [xsl] XSLT document() function!, Mukul Gandhi |
Month |