Toggle navigation
TUTORIAL HOME
XSLT - On the Client
❮ Previous Next ❯
XSLT can be used to transform the document to XHTML in your browser.
A JavaScript Solution
In the previous chapters we have explained how XSLT can be used to transform a document from XML to XHTML. We did this by adding an XSL style sheet to the XML file and let the browser do the transformation.
Even if this works fine, it is not always desirable to include a style sheet reference in an XML file (e.g. it will not work in a non XSLT aware browser.)
A more versatile solution would be to use a JavaScript to do the transformation.
By using a JavaScript, we can:
do browser-specific testing
use different style sheets according to browser and user needs
That is the beauty of XSLT! One of the design goals for XSLT was to make it possible to transform data from one format to another, supporting different browsers and different user needs.
The XML File and the XSL File
Look at the XML document that you have seen in the previous chapters:
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
.
.
</catalog>
View the XML file.
And the accompanying XSL style sheet:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/ 1999/XSL/Transform">
<xsl:template match="/">
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Title< /th>
<th style="text-align:left"> Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title" /></td>
<td><xsl:value-of select="artist" /></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
View the XSL file.
Notice that the XML file does not have a reference to the XSL file.
IMPORTANT: The above sentence indicates that an XML file could be transformed using many different XSL style sheets.
Transforming XML to XHTML in the Browser
Here is the source code needed to transform the XML file to XHTML on the client:
Example
<!DOCTYPE html>
<html>
<head>
<script>
function loadXMLDoc(filename)
{
if (window.ActiveXObject)
{
xhttp = new ActiveXObject("Msxml2.XMLHTTP" );
}
else
{
xhttp = new XMLHttpRequest();
}
xhttp.open("GET", filename, false);
try {xhttp.responseType = "msxml-document"} catch(err) {} // Helping IE11
xhttp.send("");
return xhttp.responseXML;
}
function displayResult()
{
xml = loadXMLDoc("cdcatalog.xml");
xsl = loadXMLDoc("cdcatalog.xsl");
// code for IE
if (window.ActiveXObject || xhttp.responseType == "msxml-document")
{
ex = xml.transformNode(xsl);
document.getElementById(" example").innerHTML = ex;
}
// code for Chrome, Firefox, Opera, etc.
else if (document.implementation && document.implementation. createDocument)
{
xsltProcessor = new XSLTProcessor();
xsltProcessor. importStylesheet(xsl);
resultDocument = xsltProcessor. transformToFragment(xml, document);
document.getElementById(" example").appendChild( resultDocument);
}
}
</script>
</head>
<body onload="displayResult()">
<div id="example" />
</body>
</html>
»
Tip: If you don't know how to write JavaScript, please study our JavaScript tutorial.
Example Explained:
The loadXMLDoc() function does the following:
Create an XMLHttpRequest object
Use the open() and send() methods of the XMLHttpRequest object to send a request to a server
Get the response data as XML data
The displayResult() function is used to display the XML file styled by the XSL file:
Load XML and XSL files
Test what kind of browser the user has
If Internet Explorer:
Use the transformNode() method to apply the XSL style sheet to the xml document
Set the body of the current document (id="example") to contain the styled xml document
If other browsers:
Create a new XSLTProcessor object and import the XSL file to it
Use the transformToFragment() method to apply the XSL style sheet to the xml document
Set the body of the current document (id="example") to contain the styled xml document
❮ Previous Next ❯
TUTORIAL HOME
XSLT - On the Client
❮ Previous Next ❯
XSLT can be used to transform the document to XHTML in your browser.
A JavaScript Solution
In the previous chapters we have explained how XSLT can be used to transform a document from XML to XHTML. We did this by adding an XSL style sheet to the XML file and let the browser do the transformation.
Even if this works fine, it is not always desirable to include a style sheet reference in an XML file (e.g. it will not work in a non XSLT aware browser.)
A more versatile solution would be to use a JavaScript to do the transformation.
By using a JavaScript, we can:
do browser-specific testing
use different style sheets according to browser and user needs
That is the beauty of XSLT! One of the design goals for XSLT was to make it possible to transform data from one format to another, supporting different browsers and different user needs.
The XML File and the XSL File
Look at the XML document that you have seen in the previous chapters:
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
.
.
</catalog>
View the XML file.
And the accompanying XSL style sheet:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/
<xsl:template match="/">
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Title<
<th style="text-align:left">
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title" /></td>
<td><xsl:value-of select="artist" /></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
View the XSL file.
Notice that the XML file does not have a reference to the XSL file.
IMPORTANT: The above sentence indicates that an XML file could be transformed using many different XSL style sheets.
Transforming XML to XHTML in the Browser
Here is the source code needed to transform the XML file to XHTML on the client:
Example
<!DOCTYPE html>
<html>
<head>
<script>
function loadXMLDoc(filename)
{
if (window.ActiveXObject)
{
xhttp = new ActiveXObject("Msxml2.XMLHTTP"
}
else
{
xhttp = new XMLHttpRequest();
}
xhttp.open("GET", filename, false);
try {xhttp.responseType = "msxml-document"} catch(err) {} // Helping IE11
xhttp.send("");
return xhttp.responseXML;
}
function displayResult()
{
xml = loadXMLDoc("cdcatalog.xml");
xsl = loadXMLDoc("cdcatalog.xsl");
// code for IE
if (window.ActiveXObject || xhttp.responseType == "msxml-document")
{
ex = xml.transformNode(xsl);
document.getElementById("
}
// code for Chrome, Firefox, Opera, etc.
else if (document.implementation && document.implementation.
{
xsltProcessor = new XSLTProcessor();
xsltProcessor.
resultDocument = xsltProcessor.
document.getElementById("
}
}
</script>
</head>
<body onload="displayResult()">
<div id="example" />
</body>
</html>
»
Tip: If you don't know how to write JavaScript, please study our JavaScript tutorial.
Example Explained:
The loadXMLDoc() function does the following:
Create an XMLHttpRequest object
Use the open() and send() methods of the XMLHttpRequest object to send a request to a server
Get the response data as XML data
The displayResult() function is used to display the XML file styled by the XSL file:
Load XML and XSL files
Test what kind of browser the user has
If Internet Explorer:
Use the transformNode() method to apply the XSL style sheet to the xml document
Set the body of the current document (id="example") to contain the styled xml document
If other browsers:
Create a new XSLTProcessor object and import the XSL file to it
Use the transformToFragment() method to apply the XSL style sheet to the xml document
Set the body of the current document (id="example") to contain the styled xml document
❮ Previous Next ❯
No comments:
Post a Comment