[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

XSL Template Match using z:row attributes

Subject: XSL Template Match using z:row attributes
From: "Michael McCarty" <mccarty@xxxxxxxxxx>
Date: Tue, 11 Dec 2001 19:47:15 -0800
rs data z row
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

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.