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

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; }
  1. Hi,

    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.

    <?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>

      
    Jetzt mal zum selber-Raten: welcher Knoten könnte  
    1\. eine Processing-Instruction sein (kleiner Hinweis: diese stehen in <? ?>-Klammern)?  
    2\. mit dem schönen Namen xml versehen sein?  
      
    Die Tatsache, daß xml in allen möglichen Klein-Großschreibungen explizit als Name für eine Processing-Instruction ausgeschlossen wird (siehe <http://www.w3.org/TR/REC-xml/#sec-pi>), hält doch einen IE nicht davon ab, den entsprechenden Knoten im Baum dennoch als solche zu betrachten - wäre ja noch schöner, wenn der sich mal an einen Standard hielte ...  
      
    cu,  
    Andreas
    
    -- 
    [Warum nennt sich Andreas hier MudGuard?](http://www.Mud-Guard.de/)  
    [Schreinerei Waechter](http://www.schreinerei-waechter.de/)  
    [O o ostern ...](http://ostereier.andreas-waechter.de/)  
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.  
    
    
    1. hi,

      Jetzt mal zum selber-Raten: welcher Knoten könnte

      1. eine Processing-Instruction sein (kleiner Hinweis: diese stehen in <? ?>-Klammern)?

      Danke, der eingeklammerte Hinweis war eigentlich das, was mir zum Verständnis am ehesten fehlte.

      Man könnte also bspw. <?php ... ?> als processing instruction bezeichen(?).

      Die Tatsache, daß xml in allen möglichen Klein-Großschreibungen explizit als Name für eine Processing-Instruction ausgeschlossen wird (siehe http://www.w3.org/TR/REC-xml/#sec-pi), hält doch einen IE nicht davon ab, den entsprechenden Knoten im Baum dennoch als solche zu betrachten - wäre ja noch schöner, wenn der sich mal an einen Standard hielte ...

      Ja, das ich vorher schrieb, mich zu "wundern", hätte ich eigetnlich gleich besser wissen sollen.

      gruß,
      wahsaga

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

        Man könnte also bspw. <?php ... ?> als processing instruction bezeichen(?).

        Aus Sicht von XML, nein. Es ist lediglich Zufall, dass in PHP die Scriptbereiche ebenso wie XML-Verarbeitungsanweisungen gekennzeichnet werden.

        Einen schönen Freitag noch.

        Gruß, Ashura

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
        [HTML Design Constraints: Logical Markup]
      2. Hi,

        1. eine Processing-Instruction sein (kleiner Hinweis: diese stehen in <? ?>-Klammern)?

        Danke, der eingeklammerte Hinweis war eigentlich das, was mir zum Verständnis am ehesten fehlte.

        Man könnte also bspw. <?php ... ?> als processing instruction bezeichen(?).

        Naja, ist grenzwertig. PHP läßt ja z.B. - falls entsprechend konfiguriert - auch <?= $bla ?> oder <? echo $bla ?> zu - beides sind wegen ungültigem bzw. fehlendem Namen keine processing instructions

        Eher sowas:
        <?xml-stylesheet href="style.css" type="text/css">

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        O o ostern ...
        Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.