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:(