Subject: RE: [xsl] filter From: Paul <reganmian@xxxxxxxxx> Date: Wed, 4 Dec 2002 11:45:02 -0800 (PST) |
I figure it out in the way, it's similar to unix path ;) original:<xsl:key name="byGRP" match="xs:element[not(starts-with(@ref, 'GRP'))]" use="generate-id(preceding::xs:element[starts-with(@ref, 'GRP')][1])"/> now:<xsl:key name="byGRP" match="xs:element[not(@ref=//xs:element/xs:complexType/../@name)]" use="generate-id(preceding::xs:element[@ref=//xs:element/xs:complexType/xs:sequence/xs:element/../../../@name][1])"/> original:<xsl:when test="starts-with($first,'GRP')"> now:<xsl:when test="//xs:element/xs:complexType/xs:sequence/xs:element/[../../../@name=$first]"> original:<xsl:for-each select="//xs:element[starts-with(@ref, 'GRP')]"> now:<xsl:for-each select="//xs:element[@ref=//xs:element/xs:complexType/xs:sequence/xs:element/../../../@name]"> cheers Paul --- Paul <reganmian@xxxxxxxxx> wrote: > Thanks Tom, you always take sth new to me. > > Paul > > --- TSchutzerWeissmann@xxxxxxxxxxxxxxxx wrote: > > Hi Paul, > > > > > and the fact is group element will always apply > to > > > > > a structure: > > > > > > /xs:element/xs:complexType/xs:sequence/xs:element > > with > > > the occuring of @maxOccurs attribute > > > > The "/" at the beginning of that XPath is my typo > - > > it shouldn't be there > > because it's short for the document root. The only > > element in the schema > > that is a child of / is the top node, xs:schema. > > > > Group on > > > xs:element[xs:complexType/xs:sequence/xs:element/@maxOccurs]. > > You > > don't need "boolean" - if the expression in the > > predicate is the empty > > node-set then it's equivalent to false. > > > > The negative version of the filter is > > > > > xs:element[not(xs:complexType/xs:sequence/xs:element/@maxOccurs)] > > > > This is the modified version...(untested) > > > > > ============================================================ > > > > <xsl:key name="childGroups" > > > match="xs:element[xs:complexType/xs:sequence/xs:element/@maxOccurs]" > > use="generate-id( > > > > > (ancestor::xs:element[xs:complexType/xs:sequence/xs:element/@maxOccurs][1] > > | /)[last())"/> > > > > <!-- the ( xyz | / )[last()] will always give you > > xyz if it exists, > > otherwise the root node. > > This is because the root node is the very first > > node, so any node > > comes later than it > > and will be last of the pair > > > > So we can refer to the top group using this key > and > > the id of the > > root element, instead of > > using a long XPath nightmare > > --> > > > > <xsl:key name="byGroup" > > > match="xs:element[not(xs:complexType/xs:sequence/xs:element/@maxOccurs)]" > > use="generate-id( > > > > ancestor-or-self::*/preceding-sibling::xs:element > > > > > [xs:complexType/xs:sequence/xs:element/@maxOccurs][1]"/> > > > > <!-- notice that the match is just on xs:element > --> > > > > <xsl:template match="/xs:schema/xs:element"> > > <xsl:apply-templates > > select="key('childGroups',generate-id(/))" > > mode="recurse"/> > > </xsl:template> > > > > <xsl:template match="xs:element" mode="recurse"> > > <!-- for each group --> > > <xsl:variable name="me" > select="generate-id()"/> > > > > Group <xsl:value-of select="@ref"/> Starts > > > > > <xsl:apply-templates > > select="key('childGroups',$me)" mode="recurse"/> > > > > Group <xsl:value-of select="@ref"/> Ends. > > > > <xsl:for-each select="key('byGroup',$me)"> > > <xsl:value-of select="@ref"/> Starts > > </xsl:for-each> > > > > <xsl:for-each select="key('byGroup',$me)"> > > <xsl:value-of select="@ref"/> Ends > > </xsl:for-each> > > > > </xsl:template> > > > > 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 > __________________________________________________ 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
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] filter, Paul | Thread | [xsl] & replacemnt?, El Hage Camille |
Re: [xsl] Element creation, Mitchell, David [CC] | Date | [xsl] <xsl:eval> equivalent problem, crestall |
Month |