Chrome i Safari XSLT przy użyciu JavaScript

Mam następujący kod, który stosuje styl XSLT

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);
        }
    }

Kod działa w IE i firefox, ale nie w Chrome i Safari. Jakieś pomysły dlaczego?

Aktualizacja

ResultDocument = xsltProcessor.transformToFragment(xml, document);

Powyższy wiersz powraca do wartości null. Nie jest zgłaszany błąd.

Aktualizacja

Kod nie działa, ponieważ plik xslt zawiera xsl: include. Trzeba znaleźć sposób, aby uzyskać poprawną pracę Wkleję tutaj postęp

Aktualizacja

Zaleca się używaniehttp://plugins.jquery.com/project/Transform/ podłącz. Próbuję użyć biblioteki po stronie klienta, ponieważ przykład włącza tutaj prace (http://daersystems.com/jquery/transform/).

Kod działa w IE, ale nadal nie jest w 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 i xsl są obiektami przekazywanymi.

Aktualizacja

Próbowałem zmienić plik XSL na coś bardzo prostego bez włączania, a Chrome nadal nie stosuje arkusza stylów, a IE jest. XSL wprowadzany jako obiekt to:

<?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>

Aktualizacja

Końcowym rezultatem, jaki chcę, jest zastosowanie xsl do pliku xml. Plik xsl zawiera w sobie. Chcę, aby transmisja odbyła się na kliencie idealnie.

Zaktualizowano Rupert mógłbyś zaktualizować pytanie za pomocą xml i jak nazywasz Test.Xml.xslTransform?

Dostałem xml używając 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>

Kod jest wywoływany w następujący sposób:

xsl = Test.Xml.loadXMLDoc("/_layouts/xsl/xsl.xslt");
var doc = Test.Xml.xslTransform(xData.responseXML, xsl);

xData to xml zwracany przez usługę internetową.

questionAnswers(2)

yourAnswerToTheQuestion