Neueste Web-Entwicklung Tutorials
 

XML DOM Traverse Knoten Baum


Verfahreinrichtung Schleifen oder über den Knotenbaum reisen.


Durchlaufen der Knoten Baum

Oft wollen Sie ein XML-Dokument in einer Schleife, zum Beispiel: Wenn Sie den Wert jedes Elements extrahieren möchten.

Dies nennt man "Traversing the node tree"

Das folgende Beispiel durchläuft alle untergeordneten Knoten <Buch>, und zeigt deren Namen und Werte:

Beispiel

<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var x, i ,xmlDoc;
var txt = "";
var text = "<book>" +
"<title>Everyday Italian</title>" +
"<author>Giada De Laurentiis</author>" +
"<year>2005</year>" +
"</book>";

parser = new DOMParser();
xmlDoc = parser.parseFromString(text,"text/xml");

// documentElement always represents the root node
x = xmlDoc.documentElement.childNodes;
for (i = 0; i < x.length ;i++) {
    txt += x[i].nodeName + ": " + x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("demo").innerHTML = txt;
</script>

</body>
</html>

Ausgabe:

title: Everyday Italian
author: Giada De Laurentiis
year: 2005
Versuch es selber "

Erklärt Beispiel:

  1. Laden Sie die XML-Zeichenfolge in xmlDoc
  2. Holen Sie sich die Kinderknoten des Wurzelelements
  3. Für jedes Kind Knoten Ausgabe der Knotennamen und dem Knotenwert des Textknotens

Browser Unterschiede in der DOM-Parsing

Alle modernen Browser unterstützen die W3C-DOM-Spezifikation.

Es gibt jedoch einige Unterschiede zwischen den Browsern. Ein wichtiger Unterschied ist:

  • Die Art, wie sie weiß-Leerzeichen und neue Zeilen verarbeiten

DOM - Weiße Räume und neue Linien

XML enthält oft neue Zeile oder Leerzeichen, zwischen den Knoten. Dies ist häufig der Fall, wenn das Dokument von einem einfachen Editor wie Notepad bearbeitet wird.

Das folgende Beispiel (edited by Notepad) enthält CR / LF (new line) zwischen jeder Zeile und zwei Räume vor jedem Kind - Knoten:

<book>
  <title>Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
</book>

Internet Explorer 9 und früher nicht behandeln leere weiße Räume oder neue Linien als Textknoten, während andere Browser tun.

Im folgenden Beispiel wird die Anzahl der Kinderausgangsknoten das Wurzelelement (of books.xml ) hat. IE9 und früher Wille Ausgang 4 Kind-Knoten, während IE10 und späteren Versionen und andere Browser-Ausgang 9 Kindknoten werden:

Beispiel

function myFunction(xml) {
var xmlDoc = xml.responseXML;
    x = xmlDoc.documentElement.childNodes;
    document.getElementById("demo").innerHTML =
    "Number of child nodes: " + x.length;
}
Versuch es selber "

PCDATA - Analysierte Zeichendaten

XML-Parser normalerweise den gesamten Text in einem XML-Dokument analysieren.

Wenn ein XML-Element analysiert wird, wird der Text zwischen den XML-Tags auch analysiert:

<message>This text is also parsed</message>

Der Parser ist dies , weil XML - Elemente können andere Elemente enthalten, wie in diesem Beispiel, wo der <name> Element enthält zwei weitere Elemente (first and last) :

<name><first>Bill</first><last>Gates</last></name>

und der Parser wird es brechen in Teilelemente wie folgt aus:

<name>
  <first>Bill</first>
  <last>Gates</last>
</name>

Geparste Zeichendaten (PCDATA) ist ein Begriff , um Textdaten verwendet, die von der XML - Parser syntaktisch analysiert werden.


CDATA - (Unparsed) Zeichendaten

Der Begriff CDATA wird über Textdaten verwendet, die nicht vom XML-Parser syntaktisch analysiert werden soll.

Charaktere wie "<" und "&" in XML - Elemente illegal sind.

"<" Wird ein Fehler generiert , da der Parser es als den Beginn eines neuen Elements interpretiert.

"&" Wird ein Fehler generiert , da der Parser es als den Beginn einer Zeichenentität interpretiert.

Ein Text, wie JavaScript - Code, enthält eine Menge von "<" oder "&" Zeichen. Um Fehler zu vermeiden, Script-Code kann als CDATA definiert werden.

Alles in einem CDATA-Abschnitt wird durch den Parser ignoriert.

Ein CDATA - Abschnitt beginnt mit " <![CDATA[ " and ends with " ]]> " :

<script>
<![CDATA[
function matchwo(a,b) {
    if (a < b && a < 0) {
        return 1;
    } else {
        return 0;
    }
}
]]>
</script>

In dem obigen Beispiel, alles innerhalb des CDATA-Abschnitt wird durch den Parser ignoriert.

Notes on CDATA sections:

Ein CDATA - Abschnitt kann nicht die Zeichenfolge "]]>" . Verschachtelte CDATA-Abschnitte sind nicht erlaubt.

Die "]]>" , das ist das Ende des Abschnitts CDATA darf keine Leerzeichen oder Zeilenumbrüche enthalten.