Share via


Rendering Search Results with XSL

Rendering Search Results with XSL

This content is no longer actively maintained. It is provided as is, for anyone who may still be using these technologies, with no warranties or claims of accuracy with regard to the most recent product version or service release.

You can use the XSL capabilities of the Microsoft XML (MSXML) 2.0 Component Object Model (COM) component to render the results of a PROPFIND Method.

The following example uses a simple XSL style sheet to transform the XML body returned by the PROPFIND Method into HTML for display in a browser.

JScript

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Demo DAV Request</title>
<meta name="Microsoft Theme" content="none, default">
</head>

<xml id=calxsl>
<xsl:template   xmlns:xsl="uri:xsl" xmlns:d="DAV:">
<table
      id="thetable"
      onclick="clickrow();"
      border="4"
      width="100%"
      style="border-style: groove"
      cellspacing="0" bordercolor="#808080" bordercolorlight="#808080" bordercolordark="#000080">
  <tr>
    <td width="25%" onclick="resort(0, 'd:displayname');" bgcolor="silver"><font face="Tahoma" size="1"><b>Name</b></font></td>
    <td width="25%" onclick="resort(1, 'd:propstat/d:prop/d:creationdate');" bgcolor="silver"><font face="Tahoma" size="1"><b>Creation Date</b></font></td>
    <td width="25%" onclick="resort(2, 'd:propstat/d:prop/d:getlastmodified');" bgcolor="silver"><font face="Tahoma" size="1"><b>Last Modified</b></font></td>
  </tr>
  <xsl:for-each select="d:multistatus/d:response" order-by="d:href">
  <tr>
     <td><xsl:value-of select="d:href" /></td>
     <td><xsl:for-each select="d:propstat/d:prop/d:creationdate">
                 <xsl:eval>this.nodeTypedValue</xsl:eval></xsl:for-each></td>
     <td><xsl:value-of select="d:propstat/d:prop/d:getlastmodified" /></td>
  </tr>
  </xsl:for-each>

</table>
</xsl:template>
</xml>

<body>
<h1>Simple DAV request</h1>

<p>URL: <INPUT type="text" id=urlid name=urlid value="http://myServer1/" size=128></p>
<p>Depth: <SELECT id=depthid name=depthid>
<OPTION value="0">0</OPTION>
<OPTION value="1" SELECTED>1</OPTION>
<OPTION value="1,noroot">1,noroot</OPTION>
<OPTION value="infinity">infinity</OPTION>
</SELECT><INPUT type="button" value="Go" id=button1 name=button1 onclick="update()"></p>

<div id=xsldest>
</div>

<script>

function clickrow()
{
   src = event.srcElement;
   while(src.tagName != "TR")
      src = src.parentElement;
   if(src == thetable.rows[0])
      return;
   for(i=0; i < thetable.rows.length; i++)
   {
      onerow = thetable.rows[i];
      for(j = 0; j < onerow.cells.length; j++)
      {
         onecell = onerow.cells[j];
         onecell.style.backgroundColor = "white";
         onecell.style.color = "black";
      }
   }
   for(j = 0; j < src.cells.length; j++)
   {
      onecell = src.cells[j];
      onecell.style.backgroundColor = "black";
      onecell.style.color = "white";
   }
}

function resort(col, sortby)
{
   thenode = calxsl.selectSingleNode("xsl:template/table/xsl:for-each");
   thenode.setAttribute("order-by", sortby);
   xsldest.innerHTML = thexml.transformNode(calxsl.documentElement);
   therow = thetable.rows[0];
   therow.cells[col].style.backgroundColor = "gray";
}

</script>

<script>

var request;
var thexml;

function dostatechange()
{
   if(request == null || request.readystate != 4)
      return;
   if(request.status != 207)
   {
      xsldest.innerText = "Error, status = " + request.status + " " + request.statusText;
   }
   else
   {
      thexml = request.responseXML;
      xsldest.innerHTML = thexml.transformNode(calxsl.documentElement);
   }
   request = null;
}

function update()
{
   request = new ActiveXObject("microsoft.xmlhttp");
   request.open("PROPFIND", urlid.value, true);
   request.setRequestHeader("depth", depthid.value   );
   request.onreadystatechange = dostatechange;
   xsldest.innerHTML = "<h4>loading...</h4>";
   request.send("");
}

update();

</script>

</body>

</html>


Send us your feedback about the Microsoft Exchange Server 2003 SDK.

Build: June 2007 (2007.618.1)

© 2003-2006 Microsoft Corporation. All rights reserved. Terms of use.