|
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 |