RE: [xsl] filter

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