Avatar billede jantzen88 Nybegynder
14. november 2008 - 21:48 Der er 3 kommentarer og
1 løsning

Loope alle nodes

Jeg vil gerne loope alle nodes igennem, henter mit data fra en XML fil med AJAX. "var xmlDoc=http.responseXML.documentElement;", har lavet så den køre en "for" for at tjekke alle de nodes der er, MEN vil gerne finde alle subnodes, har lavet en fucntion uden for der skal lave endnu en "for" og hvis der er nodes i den osse skal den køre en gang til. Men den vil ikke rigtig kommer videre end med 2... så kunne godt tænke mig lidt hjælp, nu har jeg siddet i 5dage og prøvet mig frem på alle mulige måder...

(Normalt bruger jeg ikke innerHTML, og bruger det kun som test lige pt)

Min XML fil ser såden her ud

<top>
  <info>
    text
    <subinfo>
      <subsubinfo>
        text
      </subsubinfo>
    </subinfo>
  </info>
  <info>
    <subinfo>
      text
    </subinfo>
  </info>
</top>


Første del af filen:

    var x = xmlDoc.childNodes;
    for (i=0;i<x.length;i++) {
        //Display only element nodes
        if (x.item(i).nodeType==1) {
            xmlID.innerHTML += "&lt;" + x.item(i).nodeName + "&gt;";
            var temp = x.item(i).childNodes
            if (temp.length > 0) { loop(i,temp); }
        }
        else if (x.item(i).nodeType==1) {
            xmlID.innerHTML += x.item(i).nodeValue;
        }
    }


########################
Min fucntion kaldet loop
########################

function loop(ii,nodes) {
    var xmlID=document.getElementById("navn");
    x2 = nodes;
    for (i2=0;i2<x2.length;i2++) {
        if (x2.item(i2).nodeType==1) {
            xmlID.innerHTML += "&lt;" + x2.item(i2).nodeName + "&gt;";
            var temp = x2.item(ii).childNodes
            if (temp.length > 0) { loop(i2,temp); }
        }
        else if (x2.item(i2).nodeType==3) {
            xmlID.innerHTML += x2.item(i2).nodeValue;
        }
    }
}
Avatar billede tjens Nybegynder
14. november 2008 - 23:42 #1
Du skal lave et recursivt loop, når XML-dybden er ukendt:

<html>
<head>
<title>Loop Node Demo</title>
<script type="text/javascript">

var xmlID;
var count= 0;

function readFile() {
    xmlID = document.getElementById("MainDiv");
    var xml;
    xml = new ActiveXObject("Microsoft.XMLDOM");
    xmlID.innerHTML="Loading...";
    xml.async = false;
    xml.load("example.xml");
    xmlID.innerHTML="&lt;" + xml.documentElement.nodeName + "&gt;<br>";
    loopNodes(xml.documentElement.childNodes, true);
}

function loopNodes(objChildNodes, rootLevel) {

  for (var i=0;i<objChildNodes.length;i++) {

        if (objChildNodes[i].nodeType==3) {
            xmlID.innerHTML += objChildNodes[i].nodeValue + "";
        } else  {
            if (objChildNodes[i].nodeType==1) {
                xmlID.innerHTML += "&lt;" + objChildNodes[i].nodeName + "&gt;";
                var temp = objChildNodes[i].childNodes;
                if (temp.length > 0) {
                    loopNodes(temp, false);
                }
            }
        }
        if (rootLevel) { xmlID.innerHTML += "<br />"; }
    }
}

</script>
</head>

<body onload="readFile();">
<div id="MainDiv">
Your browser does not support the scripts on this page
</div>
</body>
</html>
Avatar billede w13 Novice
15. november 2008 - 11:22 #2
Koden ser rigtig fornuftig ud, men jeg ville nok anbefale at bruge DOM hele vejen i stedet for at blande innerHTML ind i det. =)
Avatar billede jantzen88 Nybegynder
15. november 2008 - 18:03 #3
Super tjens... Mange tak for hjælpen, har ventet rigtig lang tid på at få det til at virke, du har fået points :)


w13:
(Normalt bruger jeg ikke innerHTML, og bruger det kun som test lige pt)

Bruger osse DOM hele vejen. men har bare lige fjernet det pga. jeg skulle teste det så jeg kunne få det til at virke
Avatar billede w13 Novice
15. november 2008 - 18:14 #4
Cool. =)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester