Subject: RE: [xsl] filter From: Paul <reganmian@xxxxxxxxx> Date: Tue, 3 Dec 2002 10:20:55 -0800 (PST) |
Hey Tom Many thanks for yr reply again attached my revised version, but seems not working well 1)xsl: the comment are the amendment for the line before 2)schema: In order to test the amendment, you also have to change the group element name to "not-start-with-GRP" Please kindly see what's wrong with my amendment many thanks !! Paul ===== schema ===== <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="groupingTest6_Open.xsl"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="snoopy-a"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="9"/> <xs:pattern value="[0-9]*"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="snoopy-b"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="2"/> <xs:pattern value="[0-9]*"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="snoopy-c"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="2"/> <xs:pattern value="[0-9]*"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="snoopy-d"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:maxLength value="4"/> <xs:pattern value="[a-z,A-Z,\s]*"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="snoopy-e"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="2"/> <xs:pattern value="[0-9]*"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="snoopy-f"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="2"/> <xs:pattern value="[0-9]*"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="rabbit-tele"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="10"/> <xs:pattern value="[0-9]*"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="rabbit-name"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="2"/> <xs:pattern value="[0-9]*"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="WOLF-tele"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="10"/> <xs:pattern value="[0-9]*"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="WOLF-name"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="2"/> <xs:pattern value="[0-9]*"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:complexType name="rabbit"> <xs:sequence> <xs:element ref="rabbit-tele" minOccurs="0"/> <xs:element ref="rabbit-name" minOccurs="0"/> </xs:sequence> </xs:complexType> <xs:element name="Harry-GROUP-ROW" type="rabbit"/> <xs:element name="GRP-Harry-GROUP"> <xs:complexType> <xs:sequence> <xs:element ref="Harry-GROUP-ROW" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="WOLF"> <xs:sequence> <xs:element ref="WOLF-tele" minOccurs="0"/> <xs:element ref="WOLF-name" minOccurs="0"/> </xs:sequence> </xs:complexType> <xs:element name="MickeyMouse-GROUP-ROW" type="WOLF"/> <xs:element name="GRP-MickeyMouse-GROUP"> <xs:complexType> <xs:sequence> <xs:element ref="MickeyMouse-GROUP" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --> <xs:element name="SCSMSG"> <xs:complexType> <xs:sequence> <xs:element ref="GRP-Harry-GROUP"/> <xs:element ref="snoopy-a"/> <xs:element ref="snoopy-b"/> <xs:element ref="snoopy-c"/> <xs:element ref="snoopy-d"/> <xs:element ref="snoopy-e"/> <xs:element ref="GRP-MickeyMouse-GROUP"/> <xs:element ref="snoopy-f"/> <xs:choice> <xs:element ref="snoopy-g"/> <xs:element ref="snoopy-h"/> </xs:choice> <xs:element ref="snoopy-i"/> <xs:element ref="snoopy-j"/> <xs:element ref="GRP-WoodStock-GROUP"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> ===== xsl ===== <xsl:key name="byGRP" match="xs:element[not(starts-with(@ref, 'GRP'))]" use="generate-id(preceding::xs:element[starts-with(@ref, 'GRP')][1])"/> <!--xsl:key name="byGRP" match="xs:element[@ref != //xs:element/@name[boolean(descendant::xs:complexType/xs:sequence/xs:element/@maxOccurs)]]" use="generate-id(preceding::xs:element/@name[boolean(descendant::xs:complexType/xs:sequence/xs:element/@maxOccurs)][1])"/--> <xsl:key name="byGRP2" match="xs:element[not(starts-with(@ref, 'GRP'))]" use="generate-id(following::xs:element[starts-with(@ref, 'GRP')][1])"/> <!--xsl:key name="byGRP2" match="xs:element[@ref != //xs:element/@name[boolean(descendant::xs:complexType/xs:sequence/xs:element/@maxOccurs)]]" use="generate-id(following::xs:element/@name[boolean(descendant::xs:complexType/xs:sequence/xs:element/@maxOccurs)][1])"/--> <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="elements" match="xs:element" use="generate-id(preceding-sibling::xs:element[@ref=//xs:element/@name[boolean(descendant::xs:complexType/xs:sequence/xs:element/@maxOccurs)]][last()] | self::xs:element[@ref=//xs:element/@name[boolean(descendant::xs:complexType/xs:sequence/xs:element/@maxOccurs)]][last()])"/--> <xsl:template match="xs:sequence"> <xsl:variable name="first"> <xsl:value-of select="*[1]/@ref | *[1]//xs:element[1]/@ref"/> </xsl:variable> <xsl:choose> <xsl:when test="starts-with($first,'GRP')"> <!--xsl:when test="$first=//xs:element/@name[boolean(descendant::xs:complexType/xs:sequence/xs:element/@maxOccurs)]"--> <xsl:text> 111111</xsl:text> <xsl:for-each select="//xs:element[starts-with(@ref, 'GRP')]"> <!--xsl:for-each select="//xs:element/xs:complexType/xs:sequence/xs:element[@maxOccurs='unbounded']"--> <xsl:variable name="me" select="generate-id()"/> <xsl:text> Group is </xsl:text><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:when> <xsl:otherwise> <xsl:text>222222</xsl:text> <xsl:for-each select="self::*//xs:element[starts-with(@ref, 'GRP')][1]"> <!--xsl:for-each select="self::*//xs:element[@ref=//xs:element/@name[boolean(descendant::xs:complexType/xs:sequence/xs:element/@maxOccurs)]][1]"--> <xsl:variable name="him" select="generate-id()"/> <xsl:for-each select="key('byGRP2',$him)"> <xsl:if test="ancestor::xs:element/@name='SCSMSG'"> <xsl:value-of select="@ref"/><xsl:text>Startshim1 </xsl:text> </xsl:if> </xsl:for-each> <xsl:for-each select="key('byGRP2',$him)"> <xsl:if test="ancestor::xs:element/@name='SCSMSG'"> <xsl:value-of select="@ref"/><xsl:text>Endshim1 </xsl:text> </xsl:if> </xsl:for-each> </xsl:for-each> <xsl:for-each select="self::*//xs:element[starts-with(@ref, 'GRP')]"> <!--xsl:for-each select="self::*//xs:element[@ref=//xs:element/@name[boolean(descendant::xs:complexType/xs:sequence/xs:element/@maxOccurs)]]"--> <xsl:variable name="me" select="generate-id()"/> <xsl:text>Group is </xsl:text><xsl:value-of select="@ref"/><xsl:text> </xsl:text> <xsl:for-each select="key('byGRP',$me)"> <xsl:value-of select="@ref"/><xsl:text>Starts </xsl:text> </xsl:for-each> <xsl:for-each select="key('byGRP',$me)"> <xsl:value-of select="@ref"/><xsl:text>Ends </xsl:text> </xsl:for-each> </xsl:for-each> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet> --- TSchutzerWeissmann@xxxxxxxxxxxxxxxx wrote: > Paul, > > Why not substitute > /xs:element/xs:complexType/xs:sequence/xs:element[@maxOccurs=5] > for > xs:element[starts-with(@ref,'GRP')] ? > It doesn't have to be '5', but it can't be a > variable. > > regards, > Tom __________________________________________________ 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, TSchutzerWeissmann | Thread | Re: [xsl] filter, Joerg Heinicke |
[xsl] using different templates, Madhavi Thottempudi | Date | RE: [xsl] qualitative decline of xs, Ben Robb |
Month |