XML transformieren in Mozilla
spankmaster79
- xsl
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 ?(
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