RE: [xsl] filter

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>&#10;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>&#10;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&#10;</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&#10;</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>&#10;</xsl:text>

			<xsl:for-each select="key('byGRP',$me)">
				<xsl:value-of
select="@ref"/><xsl:text>Starts&#10;</xsl:text>
			</xsl:for-each>

			<xsl:for-each select="key('byGRP',$me)">
				<xsl:value-of
select="@ref"/><xsl:text>Ends&#10;</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
  • [xsl] filter
    • Paul - Mon, 2 Dec 2002 08:21:27 -0800 (PST)
      • Paul - Tue, 3 Dec 2002 05:31:08 -0800 (PST)
      • <Possible follow-ups>
      • TSchutzerWeissmann - Tue, 3 Dec 2002 13:41:19 -0000
        • Paul - Tue, 3 Dec 2002 10:20:55 -0800 (PST) <=
          • Joerg Heinicke - Tue, 03 Dec 2002 19:37:25 +0100
          • Paul - Tue, 3 Dec 2002 10:49:24 -0800 (PST)
          • Paul - Tue, 3 Dec 2002 15:29:38 -0800 (PST)
      • TSchutzerWeissmann - Wed, 4 Dec 2002 11:19:50 -0000