XML in JavaScript, ChildNodes lesen

BrainLight

Mitglied
Hallo liebe Community!

Ich habe mich gestern den ganzen Tag damit beschäftigt um herauszufinden, warum ich meine ChildNodes nicht richtig auslesen kann und hoffe, dass Ihr mir diesbezüglich weiterhelfen könnt.

Es handelt sich nicht um die Frage, wie man XML ausliest, eher vielmehr - Warum JavaScript solch verückten Sachen Countet
Ich zeige euch am besten einfach die Codes:

XML-Datei:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<folder>
<category name="drei">
</category>
<category name="eins">
	<file name="bilder/eins/008_4A.JPG" />
	<file name="bilder/eins/017_14.JPG" />
</category>
<category name="vier">
</category>
<category name="zwei">
	<file name="bilder/zwei/002_12A.JPG" />
	<file name="bilder/zwei/004_10.JPG" />
	<file name="bilder/zwei/007_34.JPG" />
	<file name="bilder/zwei/015_5A.JPG" />
	<file name="bilder/zwei/021_9A.JPG" />
</category>
</folder>

test.html:
HTML:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html> <head>
<title>xml auslesen</title>
<script type="text/javascript">
<!--

function newRequest()
{
   try {
      if (window.XMLHttpRequest) {
         return new XMLHttpRequest();
      } else {
         return new ActiveXObject("MSXML2.XMLHTTP");
      }
   } catch (e) {
      return false;
   }
}

function getPictures() {
   var req;
   if (req = newRequest()) {
      req.open("GET", "bilder.xml", false);
      req.send("");
    
  
    var xml = req.responseXML;
    
      
	  for(i=0; i < xml.getElementsByTagName("category").length ; i++)
	  {
      var categories = xml.getElementsByTagName("category");
      document.write("<b>Kategorie: " + categories[i].getAttribute("name") + "</b><br>");
      
        for (u = 0; u < xml.getElementsByTagName("category")[i].childNodes.length; u++)
        {
        
          var itemCount = xml.getElementsByTagName("category")[i].childNodes.length;
          
          var files = categories[i].getElementsByTagName("file");
          
          //document.write(categories[i].childNodes[u].getAttribute("name") +"<br>");
          //document.write(categories[i].childNodes[u] +"<br>");
          document.write(files[u] +"<br>");
          document.write("Item-Count: " + itemCount + "<br>---<br>");
          
        }
      
      }
	  }
   }

// -->
</script>
</head>
<body onload="getPictures()">
</body> </html>

Wieso geben mir die document.write-Zeilen solche verrückten Daten? Und wieso kann ich nicht einfach
Code:
document.write(categories[i].childNodes[u].getAttribute("name"));
schreiben?

Vielleicht habe ich auch einfach nur ein kleines Logikproblem da reingestellt.

Es wäre schön, wenn Ihr mir auf die Sprünge helfen könntet.

Danke im Vorraus und MfG
BL
 
ich bekomme folgendes geliefert... je nachdem was ich auskommentiere:

Ausgabe:
Code:
Kategorie: drei
undefined
Item-Count: 1
---
Kategorie: eins
[object Element]
Item-Count: 5
---
[object Element]
Item-Count: 5
---
undefined
Item-Count: 5
---
undefined
Item-Count: 5
---
undefined
Item-Count: 5
---
Kategorie: vier
undefined
Item-Count: 1
---
Kategorie: zwei
[object Element]
Item-Count: 11
---
[object Element]
Item-Count: 11
---
[object Element]
Item-Count: 11
---
[object Element]
Item-Count: 11
---
[object Element]
Item-Count: 11
---
undefined
Item-Count: 11
---
undefined
Item-Count: 11
---
undefined
Item-Count: 11
---
undefined
Item-Count: 11
---
undefined
Item-Count: 11
---
undefined
Item-Count: 11
---

Wieso wird der itemCount so derartig hochgejagt? Was wird dort gezählt ?
Da haut doch was nicht hin, wa? :)
 
Hi.

Also ich sehe dort erstmal nichts ungewöhnliches (wobei ich jetzt nicht viel Zeit aufwende deine Angaben auseinander zu klamüsern).

Anscheinend verwendest du nicht den IE.

Kategorie 1 hat nunmal 5 Kindelemente:

  1. Textknoten
  2. file Element
  3. Textknoten
  4. file Element
  5. Textknoten
Gruß
 
OK, also scheint der Count ja vollkommen normal zu sein (im FireFox) - Der IE macht das ja, wie ich es erwartet hatte.

Nur zur Problematik, dass ich nicht
Code:
document.write(categories[i].childNodes[u].getAttribute("name");
ausführen kann. Das sollte doch normalerweise funktionieren... Ein Fehler wird mir auch nicht ausgegeben.

Ausgabe mit dieser Zeile:
Code:
Kategorie: drei
und das wars... :-(

Ich schätze mal, dass in der Zeile irgendwie nen Fehler drinsteckt!!
 
OK, also scheint der Count ja vollkommen normal zu sein (im FireFox) - Der IE macht das ja, wie ich es erwartet hatte.
Der IE arbeitet nicht XML konform.
Nur zur Problematik, dass ich nicht
Code:
document.write(categories[i].childNodes[u].getAttribute("name");
ausführen kann. Das sollte doch normalerweise funktionieren...
Zuersteinmal müßtest du prüfen ob categories[i].childNodes[u] überhaupt ein XML Element ist bevor du die getAttribute Methode anwendest.

Gruß
 
Zurück