RE: [xsl] Filtering XML with XSL

Subject: RE: [xsl] Filtering XML with XSL
From: "Sam Awad" <sammy_awad@xxxxxxxxx>
Date: Wed, 5 Feb 2003 22:52:44 -0700
Thanks for your help Chuck,

Here is the xsl file that contains the JavaScript:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
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">
  <xsl:param name="column" select="'givenName'" />
  <xsl:param name="userFirstName" select="''" />
    <xsl:template match="*|@*">
    <xsl:copy>
    <xsl:apply-templates select="@* | * | comment() |
processing-instruction() | text()" />
    </xsl:copy>
    </xsl:template>
  <xsl:template match="/">
  <HTML>
   <head>
    <script language="javascript">
function sort(column){
	try{
		var s = new ActiveXObject("MSXML2.FreeThreadedDOMDocument");
		var x = document.XMLDocument;

		if (x == null){
			x = navigator.XMLDocument;
			s.loadXML(navigator.XSLDocument.xml);
		}else{
			s.loadXML(document.XSLDocument.xml);
		}

		var tem = new ActiveXObject("MSXML2.XSLTemplate");
		tem.stylesheet = s;
		var proc = tem.createProcessor();
		proc.addParameter("column", column);
		proc.input = document.xmldocument;
		proc.transform();
		var str = proc.output;

		var newDoc = document.open("text/html", "replace");
		newDoc.write(str);
		navigator.XMLDocument = x;
		navigator.XSLDocument = s;
		newDoc.close();
	}catch(exception){
	}
}

function filter(userFirstName){
	try{
		var s = new ActiveXObject("MSXML2.FreeThreadedDOMDocument");
		var x = document.XMLDocument;
		if (x == null){
			x = navigator.XMLDocument;
			s.loadXML(navigator.XSLDocument.xml);
		}else{
			s.loadXML(document.XSLDocument.xml);
		}
		var tem = new ActiveXObject("MSXML2.XSLTemplate");
		tem.stylesheet = s;
		var proc = tem.createProcessor();
		proc.addParameter("userFirstName", userFirstName);
		proc.input = x;
		proc.transform();
		var str = proc.output;

		var newDoc = document.open("text/html");
		newDoc.write(str);
		navigator.XMLDocument = x;
		navigator.XSLDocument = s;
		newDoc.close();
	}catch(exception){
	}
}
    </script>
    <script language="vbscript">
      function printIt()
      window.print
      end function
    </script>
   </head>
   <BODY>
    <xsl:choose>
     <xsl:when test="$userFirstName">
      <xsl:apply-templates
select="xml/rs:data/z:row[@givenName=$userFirstName]" mode="single" />
     </xsl:when>
    <xsl:otherwise>
    <TABLE width="740">
     <tr bgcolor="Black">
      <td class="head" onclick="sort('sn')" width="40"><font face="Verdana"
size="1" color="White"><b>Last</b></font></td>
      <td class="head" onclick="sort('givenName')" width="40"><font
face="Verdana" size="1" color="White"><b>First</b></font></td>
      <td width="80"><font face="Verdana" size="1"
color="White"><b>Title</b></font></td>
      <td class="head" onclick="sort('Office')" width="50"><font
face="Verdana" size="1" color="White"><b>Office</b></font></td>
      <td width="100"><font face="Verdana" size="1" color="White"><b>Office
Number</b></font></td>
      <td width="100"><font face="Verdana" size="1" color="White"><b>Mobile
Number</b></font></td>
      <td width="100"><font face="Verdana" size="1"
color="White"><b>Email</b></font></td>
      <td class="head" onclick="printIt()" width="20"><font face="Verdana"
size="1" color="red"><b>PRINT</b></font></td>
     </tr>
      <xsl:if test="$column='sn'">
       <xsl:for-each select="xml/rs:data/z:row">
        <xsl:sort select="@sn" order="ascending" />
         <xsl:call-template name="SortByChoice">
         </xsl:call-template>
       </xsl:for-each>
      </xsl:if>
      <xsl:if test="$column='givenName'">
       <xsl:for-each select="xml/rs:data/z:row">
        <xsl:sort select="@givenName" order="ascending" />
         <xsl:call-template name="SortByChoice">
         </xsl:call-template>
       </xsl:for-each>
      </xsl:if>
     </TABLE>
    </xsl:otherwise>
    </xsl:choose>
   </BODY>
  </HTML>
 </xsl:template>
<xsl:template name="SortByChoice">
  <TR bgcolor="#FAEBD7">
   <TD><font face="Verdana" size="1" color="black"><xsl:value-of
select="@sn"/></font></TD>
   <TD><font face="Verdana" size="1" color="black"><xsl:attribute
name="onclick">filter('<xsl:value-of select="@givenName"
/>');</xsl:attribute><u><xsl:value-of select="@givenName"/></u></font></TD>
   <TD><font face="Verdana" size="1" color="black"><xsl:value-of
select="@title"/></font></TD>
   <TD><font face="Verdana" size="1" color="black"><xsl:value-of
select="@physicalDeliveryOfficeName"/></font></TD>
   <TD><font face="Verdana" size="1" color="black"><xsl:value-of
select="@telephonenumber"/></font></TD>
   <TD><font face="Verdana" size="1" color="black"><xsl:value-of
select="@mobile"/></font></TD>
   <TD><font face="Verdana" size="1" color="black"><xsl:value-of
select="@mail"/></font></TD>
  </TR>
</xsl:template>

<xsl:template match="xml/rs:data/z:row" mode="single">
 <TABLE width="740">
 <tr bgcolor="#ff8800">
  <td align="center"><img><xsl:attribute name="src"><xsl:value-of
select="@url"/></xsl:attribute></img></td>
  <td><font face="Verdana" size="1" color="black">Last Name:<xsl:value-of
select="@sn" /><br />First Name:<xsl:value-of select="@givenName" /><br
/>Title:<xsl:value-of select="@title" /><br />Office Location:<xsl:value-of
select="@physicalDeliveryOfficeName" /><br />Office Number:<xsl:value-of
select="@telephonenumber" /><br />Mobile Number:<xsl:value-of
select="@mobile" /><br />Email Address:<xsl:value-of select="@mail" /><br
/></font></td>
 </tr>
 </TABLE>
   <div style="background-color:#FF8800;width:80%;">
   <center>
   <a href="JavaScript:sort('sn')">Back</a>
   </center>
   </div>
</xsl:template>
</xsl:stylesheet>
===================================================

Also, here is a short version of the generated xml file:

====================================================
<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' rs:updatable='true'>
		<s:AttributeType name='title' rs:number='1' rs:nullable='true'>
			<s:datatype dt:type='string' dt:maxLength='256' rs:maybenull='false'/>
		</s:AttributeType>
		<s:AttributeType name='mail' rs:number='2' rs:nullable='true'>
			<s:datatype dt:type='string' dt:maxLength='256' rs:maybenull='false'/>
		</s:AttributeType>
		<s:AttributeType name='physicalDeliveryOfficeName' rs:number='3'
rs:nullable='true'>
			<s:datatype dt:type='string' dt:maxLength='256' rs:maybenull='false'/>
		</s:AttributeType>
		<s:AttributeType name='mobile' rs:number='4' rs:nullable='true'>
			<s:datatype dt:type='string' dt:maxLength='256' rs:maybenull='false'/>
		</s:AttributeType>
		<s:AttributeType name='telephonenumber' rs:number='5' rs:nullable='true'>
			<s:datatype dt:type='string' dt:maxLength='256' rs:maybenull='false'/>
		</s:AttributeType>
		<s:AttributeType name='givenName' rs:number='6' rs:nullable='true'>
			<s:datatype dt:type='string' dt:maxLength='256' rs:maybenull='false'/>
		</s:AttributeType>
		<s:AttributeType name='sn' rs:number='7' rs:nullable='true'>
			<s:datatype dt:type='string' dt:maxLength='256' rs:maybenull='false'/>
		</s:AttributeType>
		<s:AttributeType name='name' rs:number='8' rs:nullable='true'>
			<s:datatype dt:type='string' dt:maxLength='256' rs:maybenull='false'/>
		</s:AttributeType>
		<s:extends type='rs:rowbase'/>
	</s:ElementType>
</s:Schema>
<rs:data>
	<z:row mail='someone@xxxxxxxxxxxxx' physicalDeliveryOfficeName='someplace'
mobile='111-570-6533' telephonenumber='111-239-1053'
		 givenName='Anthony' sn='Peters' name='Anthony Peters'/>
        <z:row title='Engineering Project Manager'
mail='sometwo@xxxxxxxxxxxxx' physicalDeliveryOfficeName='other place'
mobile='111-371-6810'
		 telephonenumber='111-531-7249' givenName='John' sn='Allen' name='John
Allen'/>
</rs:data>
</xml>
"""""""""""""""""""""""""""""""""""""""""""""""""""

-----Original Message-----
From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
[mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of Charles White
Sent: Wednesday, February 05, 2003 6:13 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] Filtering XML with XSL


Can you post the code that is failing? Generally (not always), when using
the XMLDocument and XSLDocument properties client-side, you are using them
to reload the XSLT so that you can do things like feed new parameter values
and the like upon reload.

Chuck White
Author, Mastering XSLT, Sybex Books
http://www.javertising.com/webtech
http://www.tumeric.net

----- Original Message -----
From: "Sam Awad" <sammy_awad@xxxxxxxxx>
To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Wednesday, February 05, 2003 3:49 PM
Subject: RE: [xsl] Filtering XML with XSL


> Thanks Steve for your help. My xml is dynamically created and it seems to
me
> like you are doing a server side trip to retransform.
> At this point, my problem is that the javascript does not work with the
> properties XMLDocument and XSLDocument. They don't work with the DOM
object
> or the navigator object. I got alerts all over the script and the
following
> variables come up undefined:
> - document.XMLDocument
> - navigator.XMLDocument
>
> Not sure what the pre-requisites for Chris Bayes's javascript are. I am
> running IE6 on a w2k sp2 ==> my msxml is version 3 running in "replace
> mode".
>
> I really hope that someone on the list has any ideas as to what is
happening
> here.
>
> Thanks in advance to anyone for any help.
>
>
>
> -- 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