This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
XSL Template Match using z:row attributes
- From: "Michael McCarty" <mccarty at onebox dot com>
- To: XSL-List at lists dot mulberrytech dot com
- Date: Tue, 11 Dec 2001 19:47:15 -0800
- Subject: [xsl] XSL Template Match using z:row attributes
- Reply-to: xsl-list at lists dot mulberrytech dot com
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