Ich habe folgenden Code, der einen XSLT-StyleChrome und Safari XSLT mit 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);
}
}
Der Code funktioniert in IE und Firefox, aber nicht in Chrome und Safari gilt. Irgendwelche Ideen warum?
aktualisieren
ResultDocument = xsltProcessor.transformToFragment(xml, document);
Die Linie null zurückkehrt oben. Es wird kein Fehler ausgegeben.
aktualisieren
Der Code wird nicht als die XSLT-Datei arbeiten enthält xsl: include. Brauchen Sie noch einen Weg zu finden, das ist zum Laufen bringen werde ich Fortschritte hier
aktualisiert
Paste Es empfohlen wurde, dass ich das http://plugins.jquery.com/project/Transform/ Plugin verwenden. Ich versuche, die clientseitige Bibliothek zu verwenden, da das Beispiel von include hier funktioniert (http://daersystems.com/jquery/transform/).
Der Code funktioniert in IE aber immer noch nicht in Chrom.
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- und XSL sind beide Objekte in weitergegeben werden.
aktualisieren
Ich habe versucht, die Änderung der XSL-Datei mit nicht etwas sehr einfach zu sein gehören und Chrome ist die Anwendung noch nicht das Stylesheet und IE ist. Die XSL, die als Objekt gebracht wird, ist:
<?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>
aktualisieren
Das Endergebnis, das ich will, ist für die xsl auf die XML-Datei angewendet werden. Die xsl-Datei enthält darin enthalten. Ich möchte den Trasnfer im Idealfall auf dem Client passieren.
Aktualisiert Rupert Sie die Frage mit dem xml aktualisieren können und wie Sie Test.Xml.xslTransform sind nennen?
bekam ich die xml 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>
Der Code wie folgt aufgerufen wird:
xsl = Test.Xml.loadXMLDoc("/_layouts/xsl/xsl.xslt");
var doc = Test.Xml.xslTransform(xData.responseXML, xsl);
xData ist die xml von einem Webdienst zurückgegeben.
Geben Sie weitere Informationen an, z. B. die Ausnahmebedingungsnachricht. Ich empfehle Sarissa (Open-Source-JavaScript für browserübergreifendes XML/XSLT) zu verwenden. –
Möglicherweise gibt das XSLT in der XML kein Ergebnis zurück, da keine der Vorlagen in der XSLT mit dem XML-Dokument übereinstimmt. Siehe meinen Blog "Meide häufige XSLT-Fehler" (http://dev.ektron.com/blogs.aspx?id=22956), insbesondere den Link "XSLT: namespaces" (http://dev.ektron.com/kb_article.aspx) ? id = 481) –
Sieht aus wie ein Problem mit xsl: include in der XSLT. Im Moment nach Wegen suchen. – Rupert