webForumDet fria alternativet

XML/DOM - IE ws NS

XMLur XML

2 svar · 435 visningar · startad av Darren

Medlem sedan dec. 2002789 inlägg
Frågan#1

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.

#text: undefined
images: undefined
#text: undefined
images: undefined
#text: undefined
images: undefined
#text: undefined
images: undefined
#text: undefined
images: undefined
#text: undefined

Detta stämmer inte alls... Inte bra.

Är det någon som kan se något fel i koden här? Jag fattar typ Nada här. Det borde ju fungera...

Medlem sedan juli 20013 378 inlägg
#2

Hmm...
Två kluringar:

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

Medlem sedan dec. 2002789 inlägg
#3

Fick det att fungera med följande kod:

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

130 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)