XML --> HTML
Karl-Heinz G.
- javascript
Hallo,
gibt es eine Möglichkeit schnell und unkompliziert Knoten eines geparsten XML-Dokumentes in HTML zu konvertieren?
eingelesen wird mittels:
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(text);
bzw.
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(text,"text/html");
der Text stammt aus einem beliebigen String, in meinem Fall genauer aus einem XMLHTTPRequest. Die Daten stehen bereits nach HMTL Vorschrift in dem XML-File. Allerdings bekomme ich kompatibilitätsprobleme, wenn ich die XML-Knoten als HTML-Knoten dynamisch einfügrne möchte.
Jetzt fallen mir zwei Möglichkeiten ein, das hand zu haben:
1. es müßte eine Konvertierungsmöglichkeit von XML-Knoten nach HTML-Knoten geben
2. man könnte die Daten direkt als HTML-DOM parsen also obengeschriebenes XML-Parsing durch HTML-Parsing ersetzen.
Weiß jemand mehr dazu oder kennt andere Wege?
vielen Danke schonmal im vorraus
KHG
Hallo,
idealerweise liest man ein XHTML-Dokument als XML-DOM ein. Der Browser weiß dann sofort, dass es sich um Elemente aus dem XHTML-Namensraum handelt, die kann man dann mit importNode in ein anderes (X)HTML-DOM importieren und mit appendChild usw. einhängen.
Dummerweise kann IE das nicht (Version 6 und darunter, 7 habe ich noch nicht getestet, erwarte aber dasselbe Verhalten).
Deswegen existiert eigentlich nur eine Allround-Möglichkeit: Man liest ein Dokument nur als Quelltext ein, nicht als XML-DOM und schreibt es über innerHTML in das DOM. Bei der Verwendung von XMLHttpRequest nimmt man also gleich responseText statt responseXML, soweit möglich.
- es müßte eine Konvertierungsmöglichkeit von XML-Knoten nach HTML-Knoten geben
Das wird normalerweise mit document.importNode durchgeführt, womit man ein Knoten aus einem DOM-Document in ein anderes überträgt. Voraussetzung für das Einfügen ist, dass sich der importierte Knoten schon im XHTML-Namespace befindet.
Wie gesagt funktioniert diese Methode im IE aber nicht und auch cloneNode, womit es im IE eigentlich möglich sein sollte, hat nicht das gewünschte Ergebnis (siehe </archiv/2005/7/t110743/#m695829>).
- man könnte die Daten direkt als HTML-DOM parsen also obengeschriebenes XML-Parsing durch HTML-Parsing ersetzen.
Bei XMLHttpRequest wird immer nur XML geparst (also wäre XHTML möglich). Parsen als HTML ging nur durch Einbindung in ein unsichtbares iframe. Dann hätte man aber dasselbe Problem wie oben: Knoten zwischen Dokumenten kopieren ist schwierig. Letztlich läuft es also die Möglichkeit »Parsen als HTML« auf innerHTML hinaus.
Mathias
hi,
Deswegen existiert eigentlich nur eine Allround-Möglichkeit: Man liest ein Dokument nur als Quelltext ein, nicht als XML-DOM und schreibt es über innerHTML in das DOM. Bei der Verwendung von XMLHttpRequest nimmt man also gleich responseText statt responseXML, soweit möglich.
Ja, soweit möglich - u.U. will man ja nicht das komplette empfangene Dokument einfügen, sondern nur einen oder mehrere Nodes daraus - und dann muss man sich responseText erst mal mit Stringoperationen zurechtschneiden.
http://neo.dzygn.com/archive/id/56 bietet eine Funktion an, die importNode für den IE emulieren soll - in dem sie den XML-Knoten samt Kindelementen durchläuft und selber die nötigen Elemente analog dazu im Dokument erzeugt.
Laut Kommentaren ist das noch problematisch, wenn auch Eventhandler im zu importierenden Knoten stehen - die dort angebotene Lösung mit insertAdjacentHTML erscheint mir aber auch nicht sonderlich schön.
gruß,
wahsaga
eingelesen wird mittels:
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(text);
bzw.
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(text,"text/html");
>
> der Text stammt aus einem beliebigen String, in meinem Fall genauer aus einem XMLHTTPRequest. Die Daten stehen bereits nach HMTL Vorschrift in dem XML-File. Allerdings bekomme ich kompatibilitätsprobleme, wenn ich die XML-Knoten als HTML-Knoten dynamisch einfügrne möchte.
gibt es eigentlich einen Grund warum du dafür AJAX verwenden möchtest. Man kann doch Prima mit JS z.b. einen iframe basteln und den dann mit dem gewünschten Ergebnis als src, in die Seite einfügen. Das hätte gegenüber deiner Variante nur Vorteile, da du ja nicht die Vorteile von AJAX nutzen willst.
Struppi.
--
[Javascript ist toll](http://javascript.jstruebig.de/) (Perl auch!)