Deus Figendi: Knoten ohne Typ?

Beitrag lesen

Okay, ich habe gerade noch ein bisschen herumgespielt und scheinbar haben XML-Knoten _Kinder_ (childNodes[]!!!), die Zahlen oder Funktionen sind.
Ich habe den Code nämlich folgendermaßen geändert:

<!DOCTYPE html>  
<html>  
 <head>  
  <title></title>  
  <style>[code lang=css]  
   #debuglist {  
    font-size:x-small;  
   }  
   #debuglist div {  
    float:left;  
   }

</style>
  <script type="text/javascript">~~~javascript

function debug_print(text) {
    var debug_li = document.createElement("li");
    debug_li.appendChild(document.createTextNode(text));
    document.getElementById("debuglist").appendChild(debug_li);
   }

function parsearea () {
    var XML_string = '';
    debug_print (XML_string);
    var XML_string = document.getElementById("fooooo").value;
    debug_print (XML_string);
    var XML_object = (new DOMParser()).parseFromString(XML_string, "text/xml");
    debug_print (XML_object.childNodes.length);
    debug_print (XML_object.childNodes[0].childNodes.length);
    report_XML_Object(XML_object.childNodes[0],' ');
   }
   function report_XML_Object (xmlnode,path) {
    if (xmlnode.nodeType == 1) {
     var path = path+'<'+xmlnode.nodeName+'>';
    } else if (xmlnode.nodeType == 2) {
     var path = path+'.'+xmlnode.nodeName;
    } else if (xmlnode.nodeType == 3) {
     var path = path+'"'+xmlnode.data+'"';
    } else if (xmlnode.nodeType == 4) {
     var path = path+'('+xmlnode.data+')';
    } else {
     var path = path+'['+xmlnode.nodeType+' _ '+typeof(xmlnode)+' _ '+xmlnode+']';
    }
    debug_print (path);
    for (var i in xmlnode.childNodes) {
     report_XML_Object(xmlnode.childNodes[i],path);
    }
   }

  </script>  
 </head>  
 <body>  
  <ul id="debuglist">  
  <div>  
   <form>  
    <textarea id="fooooo" cols="30" rows="20"><?xml version="1.0"?>  
<root\_element/></textarea>  
    <input type="button" value="parse it" onclick="parsearea();"/>  
   </form>  
  </div></ul>  
 </body>  
</html>  
[/code]  
  
Und da fällt folgendes raus in Gecko:  
# <?xml version="1.0"?> <root\_element/>  
# 1  
# 0  
# <root\_element>  
# <root\_element>[\_undefined \_ number \_ 0\_]  
# <root\_element>[\_undefined \_ function \_ function item() { [native code] }\_]  
und in Presto/Opera (veralterte Version):  
# <?xml version="1.0"?> <root\_element/>  
# 1  
# 0  
# <root\_element>  
# <root\_element>[\_undefined \_ number \_ 0\_]  
# <root\_element>[\_undefined \_ function \_ function item() { [native code] }\_]  
# <root\_element>[\_undefined \_ function \_ function namedItem() { [native code] }\_]  
# <root\_element>[\_undefined \_ function \_ function tags() { [native code] }\_]  
  
Damit ist klar, dass ich sie zumindest bei der Verarbeitung identifizieren kann (weil typeof() bei XML-Knoten eigentlich immer object zurück geben sollte).  
Aber seltsam finde ich das Verhalten dennoch. Weiß jemand warum das DOMParser-Objekt diese Dinger als Kinder angibt? Als Methoden o.ä. fände ich es ja normal also wenn die for-in-Schleife durch xmlnode liefe, aber sie läuft ja durch xmlnode.childNodes und da irritiert mich das gerade ein wenig.

-- 
sh:( fo:| ch:? rl:( br:& n4:& ie:{ mo:} va:) de:µ\_de:] zu:) fl:( ss:| ls:[ js:(