phobetor: javascript

hallo,

folgende frage: ich will mit javascript eine xml datei bearbeiten die ich als string habe, gibt es da eine möglichkeit eine art DOM zu benützen?

ein beispiel:

var xml-string="<xml>\n</xml>";
var testnode= document.createElement("hui");
xml-string.getElementsByTagName("xml").appendChild(testnode);

am schluss sollte dann in xml-string "<xml><hui></hui></xml>" drinnenstehen.

das muss jetzt nicht unbedingt genau die methoden benützen die man auch füs xhtml-dom benützt, aber gibt es da ähnliche methoden, wär sehr praktisch, wenn wer was weiß bitte ;)

  1. ahh, sorry für den nichtssagenden titel

    1. ahh, sorry für den nichtssagenden titel

      ... denn hättest Du in dem zweiten Beitrag ändern können!

  2. @@phobetor:

    ein beispiel:
    var xml-string="<xml>\n</xml>";

    Schlechtes Beispiel, BTW. [XML §2.3]

    Live long and prosper,
    Gunnar

    --
    Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
  3. ich will mit javascript eine xml datei bearbeiten die ich als string habe, gibt es da eine möglichkeit eine art DOM zu benützen?

    Ja, indem du den String in ein XML-Dokument parst.
    Wie das geht, hängt ganz vom Zielbrowser ab. Manche Browser kennen den DOMParser

    var parser = new DOMParser();
    var xmlDocument= parser.parseFromString(xmlString, "text/xml");

    Im IE muss man mit einem ActiveX-Objekt arbeiten:

    var xmlDocument = new ActiveXObject("Microsoft.XMLDOM");
    xmlDocument.loadXML(xmlString);

    Dann steht dir das DOM über xmlDocument zur Verfügung.

    Um mehrere Browser zu unterstützen, nimmst du eine Fähigkeitenabfrage, die beide Ansätze verwendet:

    if (window.DOMParser) {
       ... DOMParser verwenden
    } else if (window.ActiveXObject) {
       ... IE-Methode
    }

    var testnode= document.createElement("hui");

    Das Element musst du dann natürlich im XML-Dokument erzeugen, nicht im HTML-Dokument (wozu window.document gehört).

    xml-string.getElementsByTagName("xml").appendChild(testnode);

    getElementsByTagName liefert dir eine Elementliste. Der Liste selbst kannst du kein Element anhängen, nur den einzelnen Knoten in der Liste. Also musst du mit [0] auf das Element darin zugreifen.

    var elementliste = xmlDocument.getElementsByTagName("xml");
    elementliste[0].appendChild(...);

    Wenn xml das oberste Element (Wurzelelement) ist, ginge aber auch einfach:

    xmlDocument.documentElement.appendChild(...)

    Mathias

    1. und noch ne frage, kann man das dann irgendwie wieder als text ausgeben?

      1. Hi,

        und noch ne frage, kann man das dann irgendwie wieder als text ausgeben?

        Klar - einfach mal in den Dokus ein wenig herumschauen, was für Methoden und Objekte sich in dem Umfeld sonst noch anbieten.

        Die Doku-Seite zum erwähnten DOMParser führt bspw. schnell zum XMLSerializer - "XMLSerializer can be used to convert DOM subtree or DOM document into text."

        Für den IE gibt's sicher ähnliche Möglichkeiten - aber danach kannst du mal selber in der MSDN suchen.

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“