Fick ett knasigt problem med XML/DOM kombinationen jag använder. Vore jättekul om någon kunde hjälpa mig att lösa detta.
XML-filen:
<?xml version="1.0"?>
<gallery>
<images>
<comment>Test text 0</comment>
</images>
<images>
<comment>Test text 1</comment>
</images>
<images>
<comment>Test text 2</comment>
</images>
<images>
<comment>Test text 3</comment>
</images>
<images>
<comment>Test text 4</comment>
</images>
</gallery>
javascript koden:
var myXML;
function begin() {
tmp = "";
tmp1 = "gallery";
myXML = jsXML.createDOMDocument(tmp, tmp1);
myXML.onreadystatechange = doLoad;
myXML.load("valid.xml");
}
function doLoad() {
if (myXML.readyState == 4) {
var root = myXML.documentElement;
// skriver ut root-taggen i xml-filen och antal childnodes som finns
document.write("RootTag: <b>"+root.nodeName+"</b>. Number of childNodes: <b>"+root.childNodes.length+".</b><br><br>");
// skriver innehållet i childnodes
for (i = 0; i < root.childNodes.length; ++i){
document.write(root.childNodes[i].nodeName+": "+root.childNodes[i].text+"<br/>");
}
}
}
Funktionen begin() anropas från body-taggen vid onload event.
Detta är output jag får från IE:
RootTag: gallery. Number of childNodes: 5.
images: Test text 0
images: Test text 1
images: Test text 2
images: Test text 3
images: Test text 4
Allting stämmer här. Bra.
Detta är output från NS/Mozilla:
RootTag: gallery. Number of childNodes: 11.
Låter som om "text" inte är en standardmetod (standardattribut?) i DOM eftersom du får "undefined" i Moz (har heller inte hittat metoden "text" för objekten "Node" eller "NodeList" i DOM2-specifikationen, men jag skall villigt erkänna att jag är något rostig på alla aspekter av cross-browser (dvs W3C-standard) DOM...
Så någon Guru får gärna peka oss rätt i specifikationen om jag missat den i hastigheten... ;) )
Ser ut som om Moz hanterar innehållet i <gallery> som "mixed content"där radbrytningarna mellan taggarna i kombination med de tab- eller mellanslagstecken du använder för indentering räknas som "text" mellan <images>-taggarna...
11 barn:
texten mellanslag
barnet <images>
texten mellanslag
barnet <images>
texten mellanslag
barnet <images>
texten mellanslag
barnet <images>
texten mellanslag
barnet <images>
texten mellanslag
...
Kolla med root.childNodes*.nodeType ;)
...
Å andra sidan så filtrerar MSIE bort mellanrummen som irrelevanta...
Rätt eller inte?
Hmm... You tell me! Någon av dem följer säkert W3C-standard om man gissar lite ;)
Har stött på fenomenet *ofta* i olika sammanhang iaf och lärt mig att "mixed content" förekommer *mycket* oftare än man tror när man hanterar XML ;)
Vad händer om du kopplar din XML till en DTD eller ett schema? Hanteras de olika då?*
function begin() {
myXML = jsXML.createDOMDocument();
myXML.onreadystatechange = doLoad;
myXML.async = false;
myXML.load("valid.xml");
}
function doLoad() {
if (myXML.readyState == 4) {
var root = myXML.documentElement;
var images = root.getElementsByTagName("images");
for (a = 0; a < images.length; ++a){
children = images[a].childNodes;
for (b = 0; b < children.length; ++b){
if (children[b].hasChildNodes()){
document.getElementById("result").innerHTML += children[b].childNodes[0].nodeValue+"<br/>";
}
}
}
}
}
Nu skall jag försöka svara på dina frågor/funderingar... :birp
1. Det stämmer nog. Fick det iaf inte att fungera med text.
2. Nja... Detta verkar inte stämma. Ändrade min XML fil så att den såg ut så här:
<gallery>
<images>Bla bla</images>
</gallery>
Hadde samma output från NS/Mozilla.
På tal om nodeType, vet du vart man kan finna vad de olika numeriska värden, som man får tillbaka, betyder?
Om jag lägger till en dokumenttypsdefinition så fungerar det inte alls. Inte i någon av webbläsarna. Detta är dock inget problem genom att själva XML filen är såpass enkel som den är.
Nu skall jag bara fixa sidbrytningen så är det klart... :e
139 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe