xsl-list
[Top] [All Lists]

RE: filter

2002-12-03 11:20:55
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[(_at_)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[(_at_)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[(_at_)ref=//xs:element/@name[boolean(descendant::xs:complexType/xs:sequence/xs:element/@maxOccurs)]][last()]
|
self::xs:element[(_at_)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[(_at_)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[(_at_)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[(_at_)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(_at_)uk(_dot_)imshealth(_dot_)com wrote:
Paul,

Why not substitute

/xs:element/xs:complexType/xs:sequence/xs:element[(_at_)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



<Prev in Thread] Current Thread [Next in Thread>