Subject: RE: [xsl] grouping sequence question From: TSchutzerWeissmann@xxxxxxxxxxxxxxxx Date: Thu, 28 Nov 2002 17:12:45 -0000 |
Hi Paul, I don't quite understand what you're doing, but is this any use? It gives something akin to what you want, but I'm sure it's more complicated... <xsl:key name="byGRP" match="xs:element[not(starts-with(@ref, 'GRP'))]" use="generate-id(preceding::xs:element[starts-with(@ref, 'GRP')][1])"/> <xsl:template match="/xs:schema/xs:element"> <xsl:for-each select="//xs:element[starts-with(@ref, 'GRP')]"> <xsl:variable name="me" select="generate-id()"/> Group is <xsl:value-of select="@ref"/> : <xsl:for-each select="key('byGRP',$me)"> <xsl:value-of select="@ref"/> Starts </xsl:for-each> <xsl:for-each select="key('byGRP',$me)"> <xsl:value-of select="@ref"/> Ends </xsl:for-each> </xsl:for-each> </xsl:template> </xsl:stylesheet> > -----Original Message----- > From: Paul [mailto:reganmian@xxxxxxxxx] > Sent: 28 November 2002 16:14 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: Re: [xsl] grouping sequence question > > > Hi > > I'm doing stylesheet for schema. had stuck by the > sequence grouping for several days > As I checked the grouping methodology on > http://www.dpawson.co.uk/xsl/sect2/N4486.html and > http://www.jenitennison.com/xslt/grouping/ > still not work out my problem by applying those > modules. And I tried to change the bottom > <xsl:apply-templates> > select="xs:element[starts-with(@ref, 'GRP')]" > mode="group"/> to > <xsl:for-each select ="xs:element | > xs:choice/xs:element | xs:sequence/xs:element | > xs:choice/xs:sequence/*"> > <xsl:apply-templates select="key('at', > generate-id())[generate-id() != > generate-id(current())]" mode="group"/> > </xsl:for-each> > with a new key: > <xsl:key name="at" match="xs:element" > use="generate-id((preceding-sibling::xs:element | > self::xs:element | self::xs:sequence/xs:element) )"/> > but output below is not what I desired: > starts > PET starts > MAID starts > ends1 > PET ends > MAID ends > ---11 > NAME starts > NAME ends > PHONE starts > PHONE ends > E-MAIL starts > E-MAIL ends > MAID starts > MAID ends > > I think the key "at" have some problem or it might > need to add a new template for the key "at", I can't > figure it out. Highly appreciate if anyone can kindly > give any thoughts to me !! > > ====== schema ====== > <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" > elementFormDefault="qualified" > attributeFormDefault="unqualified"> > <xs:element name="MSG"> > <xs:complexType> > <xs:sequence> > <xs:element ref="GRP1"/> > <xs:element ref="NAME"/> > <xs:sequence minOccurs="0"> > <xs:element ref="PET"/> > <xs:element ref="MAID"/> > </xs:sequence> > <xs:element ref="PHONE"/> > <xs:element ref="GRP2"/> > <xs:element ref="E-MAIL"/> > </xs:sequence> > </xs:complexType> > </xs:element> > </xs:schema> > > ======= xsl ======== > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:xs="http://www.w3.org/2001/XMLSchema" > xmlns:fo="http://www.w3.org/1999/XSL/Format"> > <xsl:output method="html" indent="no"/> > > <xsl:key name="elements" match="xs:element" > use="generate-id((preceding-sibling::xs:element | > self::xs:element) [starts-with(@ref, > 'GRP')][last()])"/> > <xsl:key name="at" match="xs:element" > use="generate-id((preceding-sibling::xs:element | > self::xs:element | self::xs:sequence/xs:element) )"/> > > <xsl:template match="xs:element" mode="group"> > > <xsl:apply-templates select="." mode="start"/> > <xsl:apply-templates select="." mode="end"/> > <xsl:apply-templates select="key('elements', > generate-id())[generate-id() != > generate-id(current())]" mode="start"/> > <xsl:apply-templates select="key('elements', > generate-id())[generate-id() != > generate-id(current())]" mode="end"/> > </xsl:template> > <xsl:template match="xs:element" mode="start"> > <xsl:value-of select="@ref"/> > <xsl:text> starts </xsl:text> > </xsl:template> > <xsl:template match="xs:element" mode="end"> > <xsl:value-of select="@ref"/> > <xsl:text> ends </xsl:text> > </xsl:template> > > <xsl:template match="xs:sequence"> > <xsl:if test="ancestor::xs:element/@name='MSG'"> > <xsl:apply-templates > select="key('elements', '')" > mode="start"/> > <xsl:apply-templates > select="key('elements', '')" > mode="end"/> > <xsl:text> ---11 </xsl:text> > > <xsl:for-each select ="xs:element | > xs:choice/xs:element | xs:sequence/xs:element | > xs:choice/xs:sequence/*"> > <xsl:apply-templates select="key('at', > generate-id())[generate-id() != > generate-id(current())]" mode="group"/> > <!--xsl:apply-templates > select="xs:element[starts-with(@ref, 'GRP')]" > mode="group"/--> > </xsl:for-each> > </xsl:if> > </xsl:template> > > </xsl:stylesheet> > > ===== desired output(it's in a group sequence) ====== > GRP1 starts > GRP1 ends > > NAME starts > PET starts > MAID starts > PHONE starts > > NAME ends > PET ends > MAID ends > PHONE ends > > GRP2 starts > GRP2 ends > > E-MAIL starts > E-MAIL ends > > ======= END ======= > > MANY THANKS !! > --PAUL > > --- Paul <reganmian@xxxxxxxxx> wrote: > > Hi > > > > Further to group sequence problem(xsl for schema), > > Is > > it possible to adjust the key setting, to let > > PET starts1 > > MAID starts1 > > PET ends1 > > MAID ends1 > > occur after name, before phone(in sequence) > > > > thanks !! > > Paul > > > > ======== schema ======= > > <xs:schema > > xmlns:xs="http://www.w3.org/2001/XMLSchema" > > elementFormDefault="qualified" > > attributeFormDefault="unqualified"> > > <xs:element name="MSG"> > > <xs:complexType> > > <xs:sequence> > > <xs:element ref="GRP"/> > > <xs:element ref="NAME"/> > > <xs:sequence minOccurs="0"> > > <xs:element ref="PET"/> > > <xs:element ref="MAID"/> > > </xs:sequence> > > <xs:element ref="PHONE"/> > > <xs:element ref="E-MAIL"/> > > </xs:sequence> > > </xs:complexType> > > </xs:element> > > </xs:schema> > > > > > > ====== style sheet ========= > > <xsl:stylesheet version="1.0" > > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > > xmlns:xs="http://www.w3.org/2001/XMLSchema" > > xmlns:fo="http://www.w3.org/1999/XSL/Format"> > > <xsl:output method="html" indent="no"/> > > <xsl:key name="elements" match="xs:element" > > use="generate-id((preceding-sibling::xs:element | > > self::xs:element) [starts-with(@ref, > > 'GRP')][last()])"/> > > <xsl:key name="at" match="element" use="@name"/> > > <xsl:template match="xs:element" mode="group"> > > <xsl:apply-templates select="." mode="start"/> > > <xsl:apply-templates select="." mode="end"/> > > <xsl:apply-templates select="key('elements', > > generate-id())[generate-id() != > > generate-id(current())]" mode="start"/> > > <xsl:apply-templates select="key('elements', > > generate-id())[generate-id() != > > generate-id(current())]" mode="end"/> > > </xsl:template> > > <xsl:template match="xs:element" mode="start"> > > <xsl:value-of select="@ref"/> > > <xsl:text> starts1 > </xsl:text> > > </xsl:template> > > <xsl:template match="xs:element" mode="end"> > > <xsl:value-of select="@ref"/> > > <xsl:text> ends1 > </xsl:text> > > </xsl:template> > > <xsl:template match="xs:sequence"> > > <xsl:if test="ancestor::xs:element/@name='MSG'"> > > <xsl:apply-templates > select="key('elements', '')" > > mode="start"/> > > <xsl:apply-templates > select="key('elements', '')" > > mode="end"/> > > <xsl:text> > ---11 > </xsl:text> > > <xsl:apply-templates > > select="xs:element[starts-with(@ref, 'GRP')]" > > mode="group"/> > > </xsl:if> > > </xsl:template> > > </xsl:stylesheet> > > > > ==== end ==== > > > > __________________________________________________ > > Do you Yahoo!? > > Yahoo! Mail Plus - Powerful. Affordable. Sign up > > now. > > http://mailplus.yahoo.com > > > > XSL-List info and archive: > > http://www.mulberrytech.com/xsl/xsl-list > > > > > __________________________________________________ > Do you Yahoo!? > Yahoo! Mail Plus - Powerful. Affordable. Sign up now. > http://mailplus.yahoo.com > > 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: Antw: [xsl] url rewriting, Mike Brown | Thread | RE: [xsl] grouping sequence questio, Paul |
Re: Antw: [xsl] url rewriting, Mike Brown | Date | Re: Antw: [xsl] url rewriting, Madhavi Thottempudi |
Month |