XSLT - Trên máy khách
XSLT có thể được sử dụng để chuyển đổi tài liệu sang XHTML trong trình duyệt của bạn.
Giải pháp JavaScript
Trong các chương trước, chúng tôi đã giải thích cách sử dụng XSLT để chuyển đổi một tài liệu từ XML sang XHTML. Chúng tôi đã thực hiện điều này bằng cách thêm biểu định kiểu XSL vào tệp XML và để trình duyệt thực hiện chuyển đổi.Ngay cả khi điều này hoạt động tốt, không phải lúc nào cũng nên đưa tham chiếu biểu định kiểu vào tệp XML (ví dụ: nó sẽ không hoạt động trong trình duyệt không nhận biết XSLT.)
Một giải pháp linh hoạt hơn là sử dụng JavaScript để thực hiện chuyển đổi.
Bằng cách sử dụng JavaScript, chúng ta có thể:
- thực hiện kiểm tra dành riêng cho trình duyệt
- sử dụng các biểu định kiểu khác nhau tùy theo nhu cầu của trình duyệt và người dùng
Đó là vẻ đẹp của XSLT! Một trong những mục tiêu thiết kế của XSLT là làm cho nó có thể chuyển đổi dữ liệu từ định dạng này sang định dạng khác, hỗ trợ các trình duyệt khác nhau và các nhu cầu khác nhau của người dùng.
Tệp XML và tệp XSL
Hãy xem tài liệu XML mà bạn đã thấy trong các chương trước:
<?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>
Và biểu định kiểu XSL đi kèm:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="https://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>
Lưu ý rằng tệp XML không có tham chiếu đến tệp XSL.
QUAN TRỌNG: Câu trên cho biết rằng một tệp XML có thể được chuyển đổi bằng cách sử dụng nhiều biểu định kiểu XSL khác nhau.
Chuyển đổi XML thành XHTML trong Trình duyệt
Đây là mã nguồn cần thiết để chuyển đổi tệp XML thành XHTML trên máy khách:
Ví dụ
<!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>
Hãy tự mình thử »Mẹo: Nếu bạn không biết cách viết JavaScript, vui lòng nghiên cứu hướng dẫn JavaScript của chúng tôi.
Ví dụ giải thích:
Hàm LoadXMLDoc() thực hiện như sau:
- Tạo một đối tượng XMLHttpRequest
- Sử dụng các phương thức open() và send() của đối tượng XMLHttpRequest để gửi yêu cầu đến máy chủ
- Nhận dữ liệu phản hồi dưới dạng dữ liệu XML
Hàm displayResult() được sử dụng để hiển thị tệp XML được tạo kiểu theo tệp XSL:
- Tải tệp XML và XSL
- Kiểm tra loại trình duyệt mà người dùng có
- Nếu Internet Explorer:
- Sử dụng phương thức TransformNode() để áp dụng biểu định kiểu XSL cho tài liệu xml
- Đặt phần thân của tài liệu hiện tại (id="example") để chứa tài liệu xml được tạo kiểu
- Nếu các trình duyệt khác:
- Tạo một đối tượng XSLTProcessor mới và nhập tệp XSL vào nó
- Sử dụng phương thức TransformToFragment() để áp dụng biểu định kiểu XSL cho tài liệu xml
- Đặt phần thân của tài liệu hiện tại (id="example") để chứa tài liệu xml được tạo kiểu