RE: [xsl] Xalan Transformation Error

Subject: RE: [xsl] Xalan Transformation Error
From: "Scott Purcell" <spurcell@xxxxxxxxxxxxx>
Date: Fri, 14 Jun 2002 14:36:04 -0500
Hello Wendell,

I appreciate your reply. I am picking up this code from someone that is not here anymore. I have Eric Burkes book here Java and XSLT and have read it.

Could you point out, or assist me in understanding what is outdated and obsolete in my code? If I had a better idea of how this should go, I will rewrite it immediately.

Thanks,
Scott


<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"; version="1.0">
<!-- Xalan  http://www.w3.org/1999/XSL/Transform -->
<!-- IE     http://www.w3.org/TR/WD-xsl -->
	<xsl:template match="/">
	<html>
		<head>
		<script language="JavaScript">
			document.domain="enklav.com";
			function setup() {
 				var pList = new Array();
				pList=parent.contentform.theform._PopUpNames.value.split(":");
 				var fList = new Array();
				fList=parent.contentform.theform._clientFileListString.value.split(":");
				for(loop=0;loop!=pList.length;loop++){
					var x = 0;
					while(x != parent.contentform.theform.elements.length){
						if(parent.contentform.theform.elements[x].name == pList[loop]){
							for(iloop=0;iloop!=(fList.length-1);iloop++){
								var myOptions= new Option(fList[iloop],fList[iloop],true, true);
								parent.contentform.theform.elements[x].options[iloop+3]=myOptions;
							}
							parent.contentform.theform.elements[x].selectedIndex=0;
						}
					x++;
					}
				}
			}// setup
		function selectPopUpItem(imageName){
			//set the popup to the Imagename
			var popupName = parent.contentform.theform.imageField.value;
			var x = 0;
			//find the popup
			while(x != parent.contentform.theform.elements.length){
				if(parent.contentform.theform.elements[x].name == popupName){
					//set the popup to the name
					var opList = parent.contentform.theform.elements[x].options;
					var oLoop=0;
					parent.contentform.theform.elements[x].selectedIndex=0;
					while(oLoop != opList.length){ // select the named item
						if(opList[oLoop].value==imageName){
							parent.contentform.theform.elements[x].selectedIndex=oLoop;
							popUpToField(parent.contentform.theform.elements[x]);
						}//if
						oLoop++;
					}//while
				}//if
				x++;
			}//while
		}// selectPopUpItem
		
		function popUpACEImages(thePopup,adNumber) {
			if(thePopup.name.substring(0,1)=="#" || thePopup.name.substring(0,1)=="*"){

//if(adNumber.length>10){
parent.contentform.theform.imageField.value = thePopup.name;
						if(thePopup.options[thePopup.selectedIndex].value==""){
							var path = 	"/content/"+adNumber.substring(0,1)+"/"+adNumber.substring(1,4)+"/"+ adNumber.substring(4,10) + "/"+ adNumber+"/"+adNumber+".i.a/Images/";		
							var newWin = window.open('','','width=240, scrollbars=yes');
							var dquote = "\"";
							var squote = "\'";
							var StartTag="&lt; ";StartTag="\u003C";
							var StopTag="&gt; ";StopTag="\u003E";

							newWin.document.writeln("<h3>Click on an image to select it.</h3>");
							newWin.document.writeln("<CENTER>");

							for(var k = 3; k!=thePopup.length; k++){

								newWin.document.writeln("<HR/>");
								newWin.document.writeln(StartTag+"A HREF='' onClick='top.opener.selectPopUpItem(" +dquote+thePopup.options[k].value +dquote+");window.close();return false;'"+StopTag);
								newWin.document.writeln(StartTag+"IMG SRC='"+path+thePopup.options[k].value+"' WIDTH='85'/" +StopTag);


								newWin.document.writeln("<BR/>"+thePopup.options[k].value+StartTag+"/A"+StopTag);

							}
							newWin.document.writeln("<HR/>");

	newWin.document.writeln(StartTag+"A HREF='test' onClick='window.close();return false;'"+ StopTag+ "[Cancel/Close]"+ StartTag+ "/A"+StopTag);

							newWin.document.writeln("</CENTER>");
						}
//					}
					
				}
 		}
				function clearStatus() {
				window.status=' ';
		} //clearStatus
		function charCount(currentCount, maxChars){
				window.status=' Character Count: ' + currentCount + '; Maximum: '+maxChars;
		}
//		function validateForm(){
//				var reply="";
//				if(adform.user.value == ""){
//					reply=reply+"Must enter a user name.  ";
//				}
//				if(adform.adName.value == ""){
//					reply=reply+"Must enter a job name.  ";
//				}
//				if(reply != ""){
//					alert(reply);
//					even.returnValue=false;
//				}
//				else
//				{
//					parent.images.location="/interface/adbuildanim.html";
//				}
//		}
		function popUpToText(thePopup,theText){
				theText.value=thePopup.options[thePopup.selectedIndex].value; //??? name instead or pass name below
 		}
 		function doImageForm(theValue) {
// 				parent.contentform.userImages.username.value=parent.contentform.theform.user.value;
// 				parent.contentform.userImages.clientId.value=parent.contentform.theform.clientID.value;
// 				if(theValue.substring(0,1)=="_"){
// 					theValueUNUSED=theValue.substring(1);
// 				}
 				parent.contentform.theform.imageField.value=theValue;
// 				parent.contentform.userImages.submit();
  				parent.results.location='/interface/ImageOptions2.html';
			}
 		function doTextForm(theValue) {
  				parent.contentform.theform.imageField.value=theValue;
// 				parent.images.location='/interface/idleoptions.html';
 				parent.results.location='/interface/textoptions.html';
 		}
		function doOptions(obj) {
			var x = 0;
			while(x != parent.contentform.theform.elements.length){			
				if(parent.contentform.theform.elements[x].name == "-"+ obj.name.substring(2)){
					if(parent.contentform.theform.elements[x].value == "Text"){
						doTextForm(obj.value);
					} else { // image name
						doImageForm(obj.value);
					}
				}
			x++;
			}
		}
		function popUpToField(thePopup){
			var x = 0;
			while(x != parent.contentform.theform.elements.length){
				if(parent.contentform.theform.elements[x].name ==  thePopup.name.substring(1) ){
					parent.contentform.theform.elements[x].value=thePopup.value;
				}
			x++;
			}
		}
		function handleImagePopUp(thePopup){
			if(thePopup.selectedIndex==1){
				parent.contentform.theform.imageField.value=thePopup.name;
				window.open('/interface/chooseImage.html','imagetest','width=285,scrollbars=yes');
			} else if(thePopup.selectedIndex==2){
				thePopup.selectedIndex=0;
			}else {
				popUpToField(thePopup);
			}
		}//handleImagePopUp
		</script>
		<style media="screen" type="text/css">
				#layer1  { position: absolute; top: 360px; left: 66px; width: 133px; height: 78px; visibility: hidden }
				.formElements   {font-family:arial, helvetica, geneva, swiss, sans-serif; color:black; font-size:9pt; line-height:9pt;}
				.radiotext      {font-family:arial, helvetica, geneva, swiss, sans-serif; color:white; font-size:10pt; line-height:10pt;}
				.label          {font-family:arial, helvetica, geneva, swiss, sans-serif; color:white; font-size:10pt; line-height:10pt;}
				A:link          {color:#99cc33}
				A:visited       {color:blue}
				.largeLabel		{font-family:arial, helvetica, geneva, swiss, sans-serif; color:#99cc33; font-size:18pt; line-height:18pt;}
				.coloredlabel    {font-family:arial, helvetica, geneva, swiss, sans-serif; color:#99cc33; font-size:10pt; line-height:10pt;font-weight:bold}
		</style> <title> AdOut.com - 
				<xsl:value-of select="ad/name" />
			</title> 
		</head>
	<body bgcolor="#145C7E" onload="setup()">
		<form action="http://ACEBuilder.enklav.com/cgi-bin/ACE_cgi5.acgi"; method="post" target="results" name="theform">
			<div class="coloredlabel">
				Job Name: <input type="text" name="adName" class="formElements" size="38" maxlength="22" onblur="clearStatus()"> 
				<xsl:choose>
					<xsl:when test="/ad/content_type[.='~default~']"><xsl:attribute name="value"><xsl:value-of select="ad/job_name/default_contents" /></xsl:attribute>
					</xsl:when>
					<xsl:otherwise>
						<xsl:attribute name="value"><xsl:value-of select="ad/job_name/user_contents" /></xsl:attribute>
					</xsl:otherwise>
				</xsl:choose>
				</input> 
			</div>
			<hr />
			<div class="largeLabel">
				<b> Content Form 
<!--img src="/interface/save.gif" width="93" height="23" border="0" align="middle" onClick="parent.images.location='/interface/adbuildanim2.html';parent.contentform.theform.Save.click()"/ -->
				</b> 
			</div>
			<table border="0" cellspacing="0" cellpadding="0" width="260">
				<tr valign="middle" height="9">
					<td align="right" valign="middle" colspan="2" height="9">
						<hr />
					</td>
				</tr>
<!-- begin content body part =============================================== -->
				<xsl:for-each select="ad/ad_content">
					<xsl:if test="label[.!='']">
						<tr valign="middle" height="14">
							<xsl:choose>
								<xsl:when test="text_options[.='off']">
									<td align="left" valign="middle" class="label" height="14">
										<b> 
											<xsl:value-of select='label' />
											: </b> 
									</td>
								</xsl:when>
								<xsl:otherwise>
									<xsl:choose>
										<xsl:when test="item_type[.='user_art']">
											<td align="left" valign="middle" class="label" height="14">
												<b> <a href="" onclick="doImageForm(this.value);return false;"> 
														<xsl:attribute name="name">x_<xsl:value-of select="item_name" /></xsl:attribute>
														<xsl:attribute name="value">_<xsl:value-of select="item_name" /></xsl:attribute>
														<xsl:value-of select='label' />:
													</a>
												</b> 
<!--
											<img src="/interface/options.gif" width="66" height="23" border="0" align="middle" onClick="doImageForm(this.value)">
											<xsl:attribute name="name">x_<xsl:value-of select="item_name"/></xsl:attribute>
											<xsl:attribute name="value">_<xsl:value-of select="item_name"/></xsl:attribute>
										</img>
-->
											</td>
										</xsl:when>
										<xsl:otherwise>

											<td align="left" valign="middle" class="label" height="14">
												<b> <a href="" onclick="doOptions(this);return false;"> 
														<xsl:attribute name="name">x_<xsl:value-of select="item_name" /></xsl:attribute>
														<xsl:attribute name="value">_<xsl:value-of select="item_name" /></xsl:attribute>
														<xsl:value-of select='label' />:
													</a>
												</b> 
											</td>
											<td align="right">
<!--
										<img src="/interface/options.gif" width="66" height="23" border="0" align="middle"	onClick="doOptions(this)" title="Click for advanced field options. Blue shading indicates options have been set for this field">
											<xsl:attribute name="name">x_<xsl:value-of select="item_name"/></xsl:attribute>
											<xsl:attribute name="value">_<xsl:value-of select="item_name"/></xsl:attribute>
										</img>
										<br/>
-->
												<select class="formElements" onchange="handleImagePopUp(this)">
													<xsl:attribute name="name">-<xsl:value-of select="item_name" /></xsl:attribute>
													<option value="Text">
														Text
													</option>
													<option value="">
														Show Previews...
													</option>
													<option value="">
														----------------
													</option>
												</select> 
											</td>
										</xsl:otherwise>
									</xsl:choose>
								</xsl:otherwise>
							</xsl:choose>
						</tr>
					</xsl:if>
					<xsl:choose>
					<xsl:when test="item_type[.='hidden']">
						<input type="hidden">
							<xsl:attribute name="name"><xsl:value-of select="item_name"/></xsl:attribute>
							<xsl:choose>
								<xsl:when test="/ad/content_type[.='~default~']">
									<xsl:attribute name="value"><xsl:value-of select="default_contents"/></xsl:attribute>
								</xsl:when>
								<xsl:otherwise>
									<xsl:attribute name="value"><xsl:value-of select="user_contents"/></xsl:attribute>
								</xsl:otherwise>
							</xsl:choose>	
						</input>
					</xsl:when>
					<xsl:otherwise>
					<tr valign="middle">
						<td align="right" colspan="2" valign="middle" height="25">
							<div align="left" class="formElements">
							<xsl:choose>
							<xsl:when test="item_type[.='text']">	
										<input class="formElements" size="52" onBlur="clearStatus()">
											<xsl:attribute name="type"><xsl:value-of select="item_type"/></xsl:attribute>
											<xsl:attribute name="name"><xsl:value-of select="item_name"/></xsl:attribute>
											<xsl:attribute name="onFocus">charCount(this.value.length,<xsl:value-of select="char_count"/>)</xsl:attribute>
											<xsl:attribute name="onKeyup">charCount(this.value.length,<xsl:value-of select="char_count"/>)</xsl:attribute>
											<xsl:attribute name="onChange">charCount(this.value.length,<xsl:value-of select="char_count"/>)</xsl:attribute>

								<xsl:choose>
									<xsl:when test="/ad/content_type[.='~default~']">
											<xsl:attribute name="value"><xsl:value-of select="default_contents"/></xsl:attribute>
									</xsl:when>
									<xsl:otherwise>
											<xsl:attribute name="value"><xsl:value-of select="user_contents"/></xsl:attribute>
									</xsl:otherwise>
								</xsl:choose>
						</input>
						</xsl:when>
						<xsl:when test="item_type[.='user_art']">
<!--
							<input class="formElements" size="52" type="text" value="type filename here" onBlur="clearStatus()">
								<xsl:attribute name="name">_Z<xsl:value-of select="item_name"/></xsl:attribute>
								<xsl:attribute name="onFocus">charCount(this.value.length,29)</xsl:attribute>
								<xsl:attribute name="onKeyup">charCount(this.value.length,29)</xsl:attribute>
								<xsl:attribute name="onChange">charCount(this.value.length,29)</xsl:attribute>
							</input>
-->
							<input  type="hidden">
								<xsl:attribute name="name">_<xsl:value-of select="item_name"/></xsl:attribute>
							</input>
							<select class="formElements" onChange="handleImagePopUp(this)">
								<xsl:attribute name="name"><xsl:value-of select="item_name"/></xsl:attribute>
									<option>
										Choose Image...
									</option>
									<option>
										Show Previews...
									</option>
									<option>----------------</option>
							</select>
						</xsl:when>
						<xsl:when test="item_type[.='textarea']">
							<TEXTAREA class="formElements" cols="49" rows="6" onblur="clearStatus()">
								<xsl:attribute name="name"><xsl:value-of select="item_name"/></xsl:attribute>
								<xsl:attribute name="onFocus">charCount(this.value.length,<xsl:value-of select="char_count"/>)</xsl:attribute>
								<xsl:attribute name="onKeyup">charCount(this.value.length,<xsl:value-of select="char_count"/>)</xsl:attribute>
								<xsl:attribute name="onChange">charCount(this.value.length,<xsl:value-of select="char_count"/>)</xsl:attribute>
							<xsl:choose>
							<xsl:when test="/ad/content_type[.='~default~']">
								<xsl:value-of select="default_contents"/></xsl:when>
							<xsl:otherwise>
								<xsl:value-of select="user_contents"/></xsl:otherwise>
							</xsl:choose></TEXTAREA>
					</xsl:when>
					<xsl:when test="item_type[.='ACE_art']">
							<select class="formElements">
								<xsl:attribute name="name"><xsl:value-of select="item_name"/></xsl:attribute>
			<xsl:attribute name="onChange">popUpACEImages(this,'<xsl:value-of select="/ad/name"/>')</xsl:attribute>
									<option>
										Choose Image...
									</option>
									<option>
										Show Previews...
									</option>
								<option>----------------</option>>
								<xsl:for-each select="option">
									<option>
										<xsl:attribute name="value"><xsl:value-of select="@value"/></xsl:attribute>
										<xsl:value-of select="name"/>
									</option>
								</xsl:for-each>
							</select>
					</xsl:when>
					<xsl:when test="item_type[.='popup']">
							<select class="formElements">
								<xsl:attribute name="name"><xsl:value-of select="item_name"/></xsl:attribute>
								<xsl:if test="line_item[.!='']">
			<xsl:attribute name="onChange">popUpToText(this,adform.clientID)</xsl:attribute>
								</xsl:if>
								<xsl:for-each select="option">
									<option>
										<xsl:attribute name="value"><xsl:value-of select="@value"/></xsl:attribute>
										<xsl:value-of select="name"/>
									</option>
								</xsl:for-each>
							</select>
					</xsl:when>
					<xsl:otherwise>
						INVALID TYPE ERROR!!!!!! "<xsl:value-of select="item_type"/>"
					</xsl:otherwise>
				</xsl:choose>
							</div>
						</td>
					</tr>
				</xsl:otherwise>
				</xsl:choose>
				</xsl:for-each>
				<tr valign="middle" height="9">
					<td align="right" valign="middle" height="9" colspan="2">
						<div align="left">
							<hr />
							<div class="largeLabel">
								Insertion Information 
							</div>
							<hr />
						</div>
					</td>
				</tr>
<!-- begin Job Setup ========================================================-->
				<xsl:for-each select="ad/job_setup">
				<xsl:choose>
					<xsl:when test="item_type[.='hidden']">
						<input type="hidden">
							<xsl:attribute name="name"><xsl:value-of select="item_name"/></xsl:attribute>
							<xsl:choose>
								<xsl:when test="/ad/content_type[.='~default~']">
									<xsl:attribute name="value"><xsl:value-of select="default_contents"/></xsl:attribute>
								</xsl:when>
								<xsl:otherwise>
									<xsl:attribute name="value"><xsl:value-of select="user_contents"/></xsl:attribute>
								</xsl:otherwise>
							</xsl:choose>	
						</input>
					</xsl:when>
					<xsl:otherwise>
			
				<tr valign="middle" height="14">
					<td align="right" valign="middle" class="coloredlabel" colspan="2" height="14">
<xsl:if test="label[.!='']">
						<div align="left">
						<xsl:value-of select='label'/>:
						</div>
</xsl:if>						
					</td>
				</tr>
				<tr valign="middle">
					<td align="right" valign="middle" colspan="2">
						<div align="left">
						<xsl:choose>
							<xsl:when test="item_type[.='text']">
									<input class="formElements" size="52">
										<xsl:attribute name="type"><xsl:value-of select="item_type"/></xsl:attribute>
											<xsl:attribute name="name"><xsl:value-of select="item_name"/></xsl:attribute>
								<xsl:choose>
									<xsl:when test="/ad/content_type[.='~default~']">
										<xsl:attribute name="value"><xsl:value-of select="default_contents"/></xsl:attribute>
									</xsl:when>
									<xsl:otherwise>
										<xsl:attribute name="value"><xsl:value-of select="user_contents"/></xsl:attribute>
									</xsl:otherwise>
								</xsl:choose>
									</input>
							</xsl:when>
							<xsl:when test="item_type[.='textarea']">
										<TEXTAREA class="formElements" rows="3" cols="49"><xsl:attribute name="name"><xsl:value-of select="item_name"/></xsl:attribute>
								<xsl:choose>
									<xsl:when test="/ad/content_type[.='~default~']"><xsl:value-of select="default_contents"/>
									</xsl:when>
									<xsl:otherwise>
											<xsl:value-of select="user_contents"/>
									</xsl:otherwise>
								</xsl:choose>
								</TEXTAREA>
							</xsl:when>
							<xsl:when test="item_type[.='label']">
							<DIV class="coloredlabel">
								<xsl:value-of select="item_name"/>
								<hr/>
							</DIV>
							</xsl:when>
							<xsl:when test="item_type[.='popup']">
								<select class="formElements">
									<xsl:attribute name="name"><xsl:value-of select="item_name"/></xsl:attribute>
									<xsl:for-each select="option">
										<option>
											<xsl:attribute name="value"><xsl:value-of select="@value"/></xsl:attribute>
											 <xsl:if test="@selected[.!='']">
											 	<xsl:attribute name="selected">selected</xsl:attribute>
											 </xsl:if>
											<xsl:value-of select="name"/>
										</option>
									</xsl:for-each>
								</select>
							</xsl:when>
							<xsl:when test="item_type[.='radio']">
								<xsl:for-each select="button"><xsl:value-of select="name"/>
									<input type="radio">
										<xsl:attribute name="name"><xsl:value-of select="item_name"/></xsl:attribute>
										<xsl:attribute name="value"><xsl:value-of select="@value"/></xsl:attribute>
										
									     <xsl:if test="checked">
									      <xsl:attribute name="checked"/>
									     </xsl:if>

										<xsl:value-of select="name"/>
									</input>
								</xsl:for-each>
							</xsl:when>
						<xsl:when test="item_type[.='buildoptions']">
							<hr/>
							<table border="0"><tr valign="top">
								<xsl:for-each select="radio">
									<td>
									<table border="0"><tr><td class="label"><b>
										<xsl:value-of select="label"/>
										</b>
									<xsl:for-each select="button">
										<tr class="label"><td class="radiotext">

										<input type="radio">
											<xsl:attribute name="name"><xsl:value-of select="item_name"/></xsl:attribute>
											<xsl:attribute name="value"><xsl:value-of select="@value"/></xsl:attribute>
											
										     <xsl:if test="checked">
										      <xsl:attribute name="checked"/>
										     </xsl:if>
											<xsl:value-of select="name"/>
										</input>
										</td></tr>
									</xsl:for-each>
								</td></tr></table></td>			
								</xsl:for-each>
								</tr></table>							
							</xsl:when>
							<xsl:otherwise>
								INVALID TYPE ERROR!!!!!!
							</xsl:otherwise>
						</xsl:choose>
						</div>
					</td>
				</tr>
				</xsl:otherwise>
				</xsl:choose>
				</xsl:for-each>
				<tr><td>
					<div id="layer1">
						<input type="submit" name="Build">
							<xsl:attribute name="value"><xsl:value-of select="ad/name"/>.i</xsl:attribute>
						</input>
						<input type="submit" name="Save">
							<xsl:attribute name="value"><xsl:value-of select="ad/name"/>.i</xsl:attribute>
						</input>
						<input type="submit"  name="Load">
							<xsl:attribute name="value"><xsl:value-of select="ad/name"/>.i</xsl:attribute>
						</input>
					</div>
				</td></tr>
			</table>
			<input type="hidden" value="" name="imageField"></input>
		</form>
<!--
		<form method="post" action="http://drawer.adout.com/servlet/UserImages"; name="userImages" target="results">
			<input type="hidden" name="clientId">
			</input>
			<input type="hidden" name="username">
			</input>
		</form>
-->
	</body>
</html>
</xsl:template>
</xsl:stylesheet>

-----Original Message-----
From: Wendell Piez [mailto:wapiez@xxxxxxxxxxxxxxxx]
Sent: Friday, June 14, 2002 1:47 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] Xalan Transformation Error


Scott,

Sad to say, although what you have may run in a (particular) browser, this 
doesn't mean it runs in an XSLT processor. That's because what you have 
isn't XSLT. It's written in an obsolete, proprietary language that was 
originally created to resemble a now-defunct draft of something that 
eventually became XSLT.

Check out the MSXML FAQ at http://www.netcrucible.com/xslt/msxml-faq.htm. 
Note that even there, Joshua's splash page alerting you to the problem was 
written 18 months ago.

You want to upgrade your code to the standard language before it's fair to 
expect it to be portable.

Good luck,
Wendell

At 12:54 PM 6/14/2002, you wrote:
>Hello,
>I have the following xsl stylesheet. When I include the namespace 
>www.w3.org/TR/WD-xsl and use IE browser the form display properly. When I 
>change the namespace to 1999/XSL/Transform and use Xalan to transform the 
>document I get "INVALID TYPE ERROR!!!!!!! " hidden"
>INVALID TYPE ERROR!!!!!! "text"
>
>I am new to xml and xsl and this is my first project. I am trying to get 
>this to run from the browser to run serverside. So I was going to use 
>Xalan and create a servlet to rip to the browser.
>
>What kind of issues should I be looking at when it runs in a browser, but 
>chokes under the Xalan transform?


======================================================================
Wendell Piez                            mailto:wapiez@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc.                http://www.mulberrytech.com
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
----------------------------------------------------------------------
   Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread