kati: toString auf Element Object

Hallo !

ich habe ein Dokument, das ich in ein Parser-objekt hineinlade. Anschliessend möchte ich auf bestimmte Knoten zugreifen und deren _ursprüngliche_ (oder normalisierte) Form herkriegen, d.h. ich möchte so was wie toString()-Methode haben, mit der ich den gesamten Knoten als String zurückbekomme.

Beispiel:

a) Dokument:

<head>
 <title>
 xxxxxxxxxx </title>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>

b) JS-Code:

//Mozilla, Firefox, ...
  if (document.implementation && document.implementation.createDocument)
  {
   var parser = new DOMParser();
   xmlDoc = parser.parseFromString( xmlResponse, "text/xml" );
  }
  //Internet Explorer
  else if (window.ActiveXObject)
  {
   xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
   xmlDoc.async = false;
   xmlDoc.loadXML( xmlResponse );

}
  else
  {
   throw "not supported";
   return;
  }

c)
jetzt hätte ich gerne einen Knoten und seine String-Ausprägung:

var t = xmlDoc.getElementsByTagName( "title" );

/*
sollte zurückgeben:
 <title>
 xxxxxxxxxx </title>
*/
alert( t.toString() );

Meine Frage:
geht es bzw. gibt es dazu einen workaround (ich habe das Element Objekt durchdebuggt, solche Methode gibt es nicht; ich müsste mir den knoten nochmals selber aus Attributen und Kindknoten zusammenbauen)?

thx
kati

  1. Hallo,

    Anschliessend möchte ich auf bestimmte Knoten zugreifen und deren _ursprüngliche_ (oder normalisierte) Form herkriegen, d.h. ich möchte so was wie toString()-Methode haben, mit der ich den gesamten Knoten als String zurückbekomme.

    function nodeString(element){  
         d=document.createElement('div')  
         d.appendChild(element.cloneNode(true))  
         alert(d.innerHTML)  
    }
    

    geht es bzw. gibt es dazu einen workaround (ich habe das Element Objekt durchdebuggt, solche Methode gibt es nicht; ich müsste mir den knoten nochmals selber aus Attributen und Kindknoten zusammenbauen)?

    Sauberer ist dies!

    Gruß aus Berlin!
    eddi

    1. Hallo,

      function nodeString(element){
           d=document.createElement('div')
           d.appendChild(element.cloneNode(true))

      Wenn element ein Element aus einem anderen XML-Dokument ist, kann man es nicht einfach mit appendChild ins aktuelle Dokument einhängen bzw. an ein darin erzeugtes Element anhängen. Es ist zwar (X)HTML, was angehängt werden soll, aber das schert die Browser gar nicht - zumindest ohne XHTML-Namespace-Angabe.
      Man müsste den Knoten erst mit document.importNode importieren, aber das kann der IE prinzipiell nicht.
      Das alles, nur um einen Knoten zu serialisieren, ist es dann doch nicht wert.

      Mathias

      1. Hallo,

        Man müsste den Knoten erst mit document.importNode importieren, aber das kann der IE prinzipiell nicht.

        Ergänzung: cloneNode erfüllt dieselbe Aufgabe des »Importierens« wie document.importNode, aber auch mit cloneNode will es der IE nicht, obwohl er diese Methode kennt.

        Mathias

  2. Hallo,

    jetzt hätte ich gerne einen Knoten und seine String-Ausprägung:

    Du willst also einen Knoten serialisieren, so nennt man die Umwandlung von DOM-Knoten in X(HT)ML-Code.
    Das geht im Gecko analog zum DOMParser über XMLSerializer. Im IE gibt es meines Wissens eine Knoten-Eigenschaft namens xml, die direkt einen String liefert.

    Mathias