Tôi có đoạn mã sau đó áp dụng một phong cách XSLTChrome và Safari XSLT sử dụng JavaScript
Test.Xml.xslTransform = function(xml, xsl) {
try {
// code for IE
if (window.ActiveXObject) {
ex = xml.transformNode(xsl);
return ex;
}
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument) {
xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
resultDocument = xsltProcessor.transformToFragment(xml, document);
return resultDocument;
}
} catch (exception) {
if (typeof (exception) == "object") {
if (exception.message) {
alert(exception.message);
}
} else {
alert(exception);
}
}
Mã này được làm việc trong IE và firefox nhưng không có trong Chrome và Safari. Bất kỳ ý tưởng tại sao?
Cập nhật
ResultDocument = xsltProcessor.transformToFragment(xml, document);
Dòng trên là trở về null. Không có lỗi nào đang được ném.
Cập nhật
Mã này không hoạt động như các tập tin XSLT chứa xsl: include. Cần phải tìm một cách để có được bao gồm làm việc tôi sẽ dán tiến bộ ở đây
Cập nhật
Nó đã được khuyến cáo mà tôi sử dụng plugin http://plugins.jquery.com/project/Transform/. Tôi đang cố gắng sử dụng thư viện phụ của khách hàng làm ví dụ về việc bao gồm các công trình ở đây (http://daersystems.com/jquery/transform/).
Mã hoạt động trong IE nhưng vẫn không có trong chrome.
Test.Xml.xslTransform = function(xml, xsl) {
try {
$("body").append("<div id='test' style='display:none;'></div>");
var a = $("#test").transform({ xmlobj: xml, xslobj: xsl });
return a.html();
}
catch (exception) {
if (typeof (exception) == "object") {
if (exception.message) {
alert(exception.message);
}
} else {
alert(exception);
}
}
}
xml và xsl là cả hai đối tượng được thông qua tại.
Cập nhật
Tôi đã cố gắng thay đổi các tập tin XSL để trở thành một cái gì đó rất đơn giản không có bao gồm và Chrome vẫn chưa được áp dụng các stylesheet và IE là. XSL đang được đưa vào như một đối tượng là:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rs="urn:schemas-microsoft-com:rowset"
xmlns:z="#RowsetSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:spsoap="http://schemas.microsoft.com/sharepoint/soap/"
>
<xsl:output method="html"/>
<xsl:template match="/">
<h1>test</h1>
</xsl:template>
</xsl:stylesheet>
Cập nhật
Kết quả cuối cùng mà tôi muốn là cho xsl được áp dụng cho các tập tin xml. Tệp xsl có trong nó bao gồm. Tôi muốn trasnfer xảy ra trên máy khách một cách lý tưởng.
Đã cập nhật Rupert bạn có thể cập nhật câu hỏi bằng xml và cách bạn đang gọi Test.Xml.xslTransform không?
tôi đã xml sử dụng IE8
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><SearchListItemsResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/"><SearchListItemsResult><listitems 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">
<rs:data ItemCount="1">
<z:row ows_Title="Test" ows_FirstName="Test 4" ows_UniqueId="74;#{1A16CF3E-524D-4DEF-BE36-68A964CC24DF}" ows_FSObjType="74;#0" ows_MetaInfo="74;#" ows_ID="74" ows_owshiddenversion="10" ows_Created="2009-12-29 12:21:01" ows_FileRef="74;#Lists/My List Name/74_.000" ReadOnly="False" VerificationRequired="0"/>
</rs:data>
</listitems></SearchListItemsResult></SearchListItemsResponse></soap:Body></soap:Envelope>
Mã này đã được gọi như sau:
xsl = Test.Xml.loadXMLDoc("/_layouts/xsl/xsl.xslt");
var doc = Test.Xml.xslTransform(xData.responseXML, xsl);
xdata là xml trả về bởi một dịch vụ web.
Vui lòng cung cấp thêm thông tin, chẳng hạn như thông báo ngoại lệ. Tôi khuyên bạn nên sử dụng Sarissa (JavaScript nguồn mở cho XML/XSLT trên nhiều trình duyệt). –
Có lẽ XSLT trên XML không trả lại kết quả vì không có mẫu nào trong kết hợp XSLT trên tài liệu XML. Xem blog của tôi "Tránh các lỗi XSLT phổ biến" (http://dev.ektron.com/blogs.aspx?id=22956), đặc biệt là liên kết "XSLT: namespaces" (http://dev.ektron.com/kb_article.aspx ? id = 481) –
Có vẻ như có sự cố khi sử dụng xsl: include trong xslt. Nhìn vào những cách vòng quanh nó vào lúc này. – Rupert