Subject: [xsl] XSL Template Match using z:row attributes From: "Michael McCarty" <mccarty@xxxxxxxxxx> Date: Tue, 11 Dec 2001 19:47:15 -0800 |
I'm kind of new to XSL and am having trouble. I guess I don't fully understand the way templates are matched or applied. Any help is greatly appreciated. I also don't know if the problem is in the namespaces or do I fully understand those. My XML file is in the format that MS ADO produces from a recordset with <rs:data> and <z:row> elements (sorry for the long file/word wrapping): *************** File: CategoryTree.xml *************** <?xml-stylesheet type="text/xsl" href="CategoryTree.xsl" ?> <xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882' xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882' xmlns:rs='urn:schemas-microsoft-com:rowset' xmlns:z='#RowsetSchema'> <s:Schema id='RowsetSchema'> <s:ElementType name='row' content='eltOnly'> <s:AttributeType name='LEVEL' rs:number='1' rs:nullable='true' rs:writeunknown='true'> <s:datatype dt:type='number' rs:dbtype='varnumeric' dt:maxLength='20' rs:scale='0' rs:precision='38'/> </s:AttributeType> <s:AttributeType name='CATEGORYNAME' rs:number='2' rs:writeunknown='true'> <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='50' rs:maybenull='false'/> </s:AttributeType> <s:AttributeType name='CATEGORYID' rs:number='3' rs:writeunknown='true'> <s:datatype dt:type='number' rs:dbtype='numeric' dt:maxLength='19' rs:scale='0' rs:precision='10' rs:fixedlength='true' rs:maybenull='false'/> </s:AttributeType> <s:AttributeType name='PARENTCATEGORYID' rs:number='4' rs:writeunknown='true'> <s:datatype dt:type='number' rs:dbtype='numeric' dt:maxLength='19' rs:scale='0' rs:precision='10' rs:fixedlength='true' rs:maybenull='false'/> </s:AttributeType> <s:AttributeType name='CHILDSORTORDER' rs:number='5' rs:nullable='true' rs:writeunknown='true'> <s:datatype dt:type='number' rs:dbtype='numeric' dt:maxLength='19' rs:scale='0' rs:precision='4' rs:fixedlength='true'/> </s:AttributeType> <s:extends type='rs:rowbase'/> </s:ElementType> </s:Schema> <rs:data> <z:row LEVEL='1' CATEGORYNAME='Product 1' CATEGORYID='1' PARENTCATEGORYID='0' CHILDSORTORDER='10'/> <z:row LEVEL='2' CATEGORYNAME='Department A' CATEGORYID='2' PARENTCATEGORYID='1' CHILDSORTORDER='20'/> <z:row LEVEL='2' CATEGORYNAME='Department B' CATEGORYID='3' PARENTCATEGORYID='1' CHILDSORTORDER='30'/> <z:row LEVEL='2' CATEGORYNAME='Department C' CATEGORYID='4' PARENTCATEGORYID='1' CHILDSORTORDER='40'/> <z:row LEVEL='3' CATEGORYNAME='Prospect' CATEGORYID='5' PARENTCATEGORYID='4' CHILDSORTORDER='50'/> <z:row LEVEL='4' CATEGORYNAME='Appointment' CATEGORYID='49' PARENTCATEGORYID='5' CHILDSORTORDER='51'/> <z:row LEVEL='4' CATEGORYNAME='Follow Up' CATEGORYID='50' PARENTCATEGORYID='5' CHILDSORTORDER='52'/> <z:row LEVEL='4' CATEGORYNAME='Invitation' CATEGORYID='51' PARENTCATEGORYID='5' CHILDSORTORDER='53'/> <z:row LEVEL='4' CATEGORYNAME='Referral' CATEGORYID='52' PARENTCATEGORYID='5' CHILDSORTORDER='54'/> <z:row LEVEL='3' CATEGORYNAME='Book' CATEGORYID='6' PARENTCATEGORYID='4' CHILDSORTORDER='60'/> <z:row LEVEL='4' CATEGORYNAME='Appointment' CATEGORYID='41' PARENTCATEGORYID='6' CHILDSORTORDER='61'/> <z:row LEVEL='4' CATEGORYNAME='Follow Up' CATEGORYID='42' PARENTCATEGORYID='6' CHILDSORTORDER='62'/> <z:row LEVEL='4' CATEGORYNAME='Invitation' CATEGORYID='43' PARENTCATEGORYID='6' CHILDSORTORDER='63'/> <z:row LEVEL='4' CATEGORYNAME='Referral' CATEGORYID='44' PARENTCATEGORYID='6' CHILDSORTORDER='64'/> <z:row LEVEL='1' CATEGORYNAME='Product 2' CATEGORYID='21' PARENTCATEGORYID='0' CHILDSORTORDER='100'/> <z:row LEVEL='2' CATEGORYNAME='Department B' CATEGORYID='22' PARENTCATEGORYID='21' CHILDSORTORDER='120'/> <z:row LEVEL='2' CATEGORYNAME='Department A' CATEGORYID='23' PARENTCATEGORYID='21' CHILDSORTORDER='110'/> <z:row LEVEL='2' CATEGORYNAME='Department C' CATEGORYID='24' PARENTCATEGORYID='21' CHILDSORTORDER='130'/> <z:row LEVEL='3' CATEGORYNAME='Prospect' CATEGORYID='25' PARENTCATEGORYID='24' CHILDSORTORDER='140'/> <z:row LEVEL='4' CATEGORYNAME='Appointment' CATEGORYID='53' PARENTCATEGORYID='25' CHILDSORTORDER='141'/> <z:row LEVEL='4' CATEGORYNAME='Follow Up' CATEGORYID='54' PARENTCATEGORYID='25' CHILDSORTORDER='142'/> <z:row LEVEL='4' CATEGORYNAME='Invitation' CATEGORYID='55' PARENTCATEGORYID='25' CHILDSORTORDER='143'/> <z:row LEVEL='4' CATEGORYNAME='Referral' CATEGORYID='56' PARENTCATEGORYID='25' CHILDSORTORDER='144'/> <z:row LEVEL='3' CATEGORYNAME='Book' CATEGORYID='26' PARENTCATEGORYID='24' CHILDSORTORDER='150'/> <z:row LEVEL='4' CATEGORYNAME='Appointment' CATEGORYID='45' PARENTCATEGORYID='26' CHILDSORTORDER='151'/> <z:row LEVEL='4' CATEGORYNAME='Follow Up' CATEGORYID='46' PARENTCATEGORYID='26' CHILDSORTORDER='152'/> <z:row LEVEL='4' CATEGORYNAME='Invitation' CATEGORYID='47' PARENTCATEGORYID='26' CHILDSORTORDER='153'/> <z:row LEVEL='4' CATEGORYNAME='Referral' CATEGORYID='48' PARENTCATEGORYID='26' CHILDSORTORDER='154'/> </rs:data> </xml> ********** End of File: CategoryTree.xml *************** *************** File: CategoryTree.xsl *************** <?xml version='1.0'?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <HTML> <BODY topmargin="0" leftmargin="0"> <xsl:apply-templates select="xml/rs:data/z:row[@LEVEL='1']"/> </BODY> </HTML> </xsl:template> <xsl:template match="xml/rs:data/z:row[@LEVEL='1']"> <div class="clsItem"> <span class="clsSpace" type="img"><span class="clsCollapse">+</span></span><span class="clsLabel" type="label"> <xsl:attribute name="id"><xsl:value-of select="@CATEGORYID"/></xsl:attribute> <xsl:attribute name="parentid"><xsl:value-of select="@PARENTCATEGORYID"/></xsl:attribute> <xsl:attribute name="title"><xsl:value-of select="@CATEGORYNAME"/></xsl:attribute> <xsl:value-of select="@CATEGORYNAME"/> </span> <div> <xsl:apply-templates select="xml/rs:data/z:row[@LEVEL='2']"/> </div> </div> </xsl:template> <xsl:template match="xml/rs:data/z:row[@LEVEL='2']"> <div class="clsItem"> <span class="clsSpace" type="img"><span class="clsCollapse">+</span></span><span class="clsLabel" type="label"> <xsl:attribute name="id"><xsl:value-of select="@CATEGORYID"/></xsl:attribute> <xsl:attribute name="parentid"><xsl:value-of select="@PARENTCATEGORYID"/></xsl:attribute> <xsl:attribute name="title"><xsl:value-of select="@CATEGORYNAME"/></xsl:attribute> <xsl:value-of select="@CATEGORYNAME"/> </span> <div> <xsl:apply-templates select="xml/rs:data/z:row[@LEVEL='3']"/> </div> </div> </xsl:template> <xsl:template match="xml/rs:data/z:row[@LEVEL='3']"> <div class="clsItem"> <span class="clsSpace" type="img"><span class="clsCollapse">+</span></span><span class="clsLabel" type="label"> <xsl:attribute name="id"><xsl:value-of select="@CATEGORYID"/></xsl:attribute> <xsl:attribute name="parentid"><xsl:value-of select="@PARENTCATEGORYID"/></xsl:attribute> <xsl:attribute name="title"><xsl:value-of select="@CATEGORYNAME"/></xsl:attribute> <xsl:value-of select="@CATEGORYNAME"/> </span> <div> <xsl:apply-templates select="xml/rs:data/z:row[@LEVEL='4']"/> </div> </div> </xsl:template> <xsl:template match="xml/rs:data/z:row[@LEVEL='4']"> <div class="clsItem"> <span class="clsSpace" type="img"><span class="clsCollapse">+</span></span><span class="clsLabel" type="label"> <xsl:attribute name="id"><xsl:value-of select="@CATEGORYID"/></xsl:attribute> <xsl:attribute name="parentid"><xsl:value-of select="@PARENTCATEGORYID"/></xsl:attribute> <xsl:attribute name="title"><xsl:value-of select="@CATEGORYNAME"/></xsl:attribute> <xsl:value-of select="@CATEGORYNAME"/> </span> <div> <xsl:apply-templates select="xml/rs:data/z:row[@LEVEL='5']"/> </div> </div> </xsl:template> </xsl:stylesheet> ********** End of File: CategoryTree.xsl *************** You can see that the LEVEL attribute of each z:row should determine the nested heirarchy. What I expect to get, wrapped in <DIV> tags hierarchically, is something like this: + Product 1 + Department A + Department B + Department C + Prospect + Appointment + Follow Up + Invitation + Referral + Book + Appointment + Follow Up + Invitation + Referral + Product 2 + Department B + Department A + Department C + Prospect + Appointment + Follow Up + Invitation + Referral + Book + Appointment + Follow Up + Invitation + Referral What I am getting is this: + Product 1 + Product 2 It appears that I get the LEVEL='1', but not the remaining. I wonder if there's a way around 'hard coding' the LEVEL's in case I have more than 4 or 5..?? I know it would be easier if my XML was is a different format, but I'm forced to use the MS ADO export format. Thank you, in advance, for your help. Michael =:-) __________________________________________________ FREE voicemail, email, and fax...all in one place. Sign Up Now! http://www.onebox.com XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Accessing the Next or Pre, Michael Kay | Thread | Re: [xsl] XSL Template Match using , Trevor Nash |
Re: [xsl] max value, Mike Brown | Date | RE: [xsl] namespace issue, DPawson |
Month |