spankmaster79: XML transformieren in Mozilla

Ich komme da grad nicht weiter. Versuche ein XML mit einem XSLT zu transformieren.

Die XML sowie XSLT Daten stehen in einem HTML Dokument als Data Island.

Hier nun was ich bereits gemacht habe:

Damit ich die loadXML() Funktion benutzen kann muss für den Mozilla erstmal die Document Klasse erweitern

  
Document.prototype.loadXML = function(strXML) {  
        //create a DOMParser  
        var objDOMParser = new DOMParser();  
        //create new document from string  
        var objDoc = objDOMParser.parseFromString(strXML, "text/xml");  
        //make sure to remove all nodes from the document  
        while (this.hasChildNodes())  
            this.removeChild(this.lastChild);  
        //add the nodes from the new document  
        for (var i=0; i < objDoc.childNodes.length; i++) {  
            //import the node  
            var objImportedNode = this.importNode(objDoc.childNodes[i], true);  
            //append the child to the current document  
            this.appendChild(objImportedNode);  
        } //End: for  
    } //End: function  

Dann um aus dem DOM XML wieder einen String zu basteln brauche ich wie im IE das xml Attribut. Dieses gibt es aber nicht im Mozilla. Also erzeuge ich eines in Node

  
    /**  
    * add the xml attribute to the node class  
    * Everytime the .xml attribute is called it will be transformed to string  
    */  
    Node.prototype.__defineGetter__("xml", function () {  
        var oSerializer = new XMLSerializer();  
        return oSerializer.serializeToString(this, "text/xml");  
    });  

Dann bastel ich mir 2 DOM Objekte aus im Mozilla und lade mein XML aus der Data Island in das DOM Objekt

  
//Param 1=namespace; 2=root node; 3=not yet activated in mozilla, so null  
    objSrcTree = document.implementation.createDocument("", "", null);  
    objXSLT = document.implementation.createDocument("", "", null);  
    objSrcTree.async = false;  
    try {  
      objSrcTree.loadXML(document.getElementById("xmlData").innerHTML);  
      objXSLT.loadXML(document.getElementById("xsltData").innerHTML);  
    }  
    catch(Exception){  
        alert("loadXML failed in Mozilla");  
    }  

Bis hierhin funktioniert auch alles. Wenn ich alert(objSrcTree.xml) oder alert(objXSLT.xml) mache bekomme ich die Dokumente angezeigt also sollten sie auch geladen sein. :D

Nun bastel ich mir einen XSLT Prozessor und versuche zu transformieren

  
    objXSLTProc = new XSLTProcessor();  
    objXSLTProc.importStylesheet(objXSLT);  
  
    try {  
        var resultDOM = objXSLTProc.transformToDocument(objSrcTree);  
        var sResult = resultDOM.xml;  
        alert(sResult);  
    }  
    catch(Exeption){  
        alert("XSLT Transformation failed");  
    }  

Er landet im try Block und führt alles aus. Nur das sResult ist leer......

Sieht da vielleicht jemand einen Fehler oder bin ich jetzt schon zu speziell...

Gruß
Spanky  ?(

  1. Hallo,

    Wenn ich alert(objSrcTree.xml) oder alert(objXSLT.xml) mache bekomme ich die Dokumente angezeigt also sollten sie auch geladen sein. :D

    Nun bastel ich mir einen XSLT Prozessor und versuche zu transformieren

    objXSLTProc = new XSLTProcessor();
        objXSLTProc.importStylesheet(objXSLT);

    try {
            var resultDOM = objXSLTProc.transformToDocument(objSrcTree);
            var sResult = resultDOM.xml;
            alert(sResult);
        }
        catch(Exeption){
            alert("XSLT Transformation failed");
        }

    
    > Er landet im try Block und führt alles aus. Nur das sResult ist leer......  
    >   
    > Sieht da vielleicht jemand einen Fehler oder bin ich jetzt schon zu speziell...  
      
      
      
    Du könnst es mit 'tansformToFragment' versuchen:  
      
    var HTMLAusgabe = objXSLTProc.transformToFragment(objSrcTree, document);  
    document.getElementById("ausgabe").appendChild(HTMLAusgabe);  
      
    Grüße  
    Thomas