wahsaga: nodeType 7 - "Knoten für Verarbeitungsanweisung"?

Beitrag lesen

hi,

um einen per XMLHTTPRequest geholten XHTML-Dokumentteil in ein bestehendes Dokument einzufügen wollte ich, um nicht stumpf .responseText über .innerHTML irgendwo reinzuklatschen, mir $E so anpassen, dass es das XML rekursiv durchläuft, und die entsprechenden Elemente erzeugt und einfügt.

Klappt auch ganz gut, in Browsern (Code siehe unten) - der IE weigerte sich zunächst hartnäckig, meldet einen Fehler "Typkonflikt" bei der Anweisung
el.appendChild(insertXML(XMLNode.childNodes[i]));
im letzten IF der Funktion.

Durch Debugausgaben (auskommentiertes alert()) bin ich dann darauf gestossen, dass FireFox und Opera mit als erstes Kindelement eines mit dem nodeName "div" und nodeType 1 liefern - der IE meldet mir davor aber noch einen Knoten "xml" vom Typ 7.
Wenn ich dann untiges IF, dass auf diesen Typ 7 abfragt, ent-kommentiere - dann funktioniert die Funktion auch im IE wie gewünscht.

Da er ganz zu Beginn der Funktion den XML-Dokumentknoten aber richtig als "#document" vom Typ 9 erkennt, wunderte ich mich, wo er dann "xml" Typ 7 herzaubert, den die anderen Browser nicht (er)kennen?

Laut SELFHTML ist 7 ein "Knoten für Verarbeitungsanweisung" - was habe ich mir darunter vorzustellen?

Die DOM Level 2 Core Specification nennt das Ding auf englisch analog PROCESSING_INSTRUCTION_NODE, also vom Typ Interface ProcessingInstruction.
Aber aus der Beschreibung dort werde ich auch nicht ganz schlau, was ich mir konkret darunter vorzustellen habe ...?

"The ProcessingInstruction interface represents a 'processing instruction', used in XML as a way to keep processor-specific information in the text of the document."

Der Javascript-Code der Funktion:

  
function insertXML (XMLNode) {  
   #var el;  
   if (XMLNode.nodeType == 9) {  
      el=document.createDocumentFragment();  
   }  
   else {  
      if (XMLNode.nodeType == 1) {  
         // Element erzeugen  
         el=document.createElement(XMLNode.nodeName);  
         // Attribute zuweisen  
         for (i=0,attr=XMLNode.attributes,l=attr.length; i<l; i++) {  
            // toLowerCase für Opera, der die Attributnamen aus dem XML in Großbuchstaben liefert,  
            // sie dann aber in dieser Schreibweise zugewiesen nicht akzeptieren mag  
            el[XMLNode.attributes[i].nodeName.toLowerCase()] = XMLNode.attributes[i].nodeValue;  
         }  
      }  
      else {  
         if (XMLNode.nodeType == 3) {  
            // Textknoten anlegen  
            el = document.createTextNode(XMLNode.data);  
         }  
      }  
   }  
  
   // rekursiver Aufruf für Kindknoten  
   if (XMLNode.hasChildNodes()) {  
      for (var i=0, c=XMLNode.childNodes.length; i<c; i++) {  
         //alert("Knotenname: "+XMLNode.childNodes[i].nodeName+"\nKnotentyp: "+XMLNode.childNodes[i].nodeType);  
         //if (XMLNode.childNodes[i].nodeType != 7) {  
            el.appendChild(insertXML(XMLNode.childNodes[i]));  
         //}  
      }  
   }  
   return el;  
}  

Beim Aufruf von XMLHTTPRequest zurückgeliefertes XML-Dokument für meinen Test:

  
<?xml version="1.0" encoding="utf-8"?>  
<div>  
   <p>Der folgende Link führt zu <a href="http://example.com/" title="Link zu example.com"><strong>example.com</strong></a>, der <em>Beispiel-Domain</em> - jawohl!</p>  
</div>  

gruß,
wahsaga

--
/voodoo.css:
#GeorgeWBush { position:absolute; bottom:-6ft; }