XML-DOM -Traverse-Knotenbaum
Traversieren bedeutet Durchschleifen oder Überqueren des Knotenbaums.
Durchqueren des Knotenbaums
Oft möchten Sie ein XML-Dokument durchlaufen, zum Beispiel: wenn Sie den Wert jedes Elements extrahieren möchten.
Dies wird als "Traversieren des Knotenbaums" bezeichnet.
Das folgende Beispiel durchläuft alle untergeordneten Knoten von <book> und zeigt ihre Namen und Werte an:
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
Beispiel erklärt:
- Laden Sie die XML-Zeichenfolge in xmlDoc
- Rufen Sie die untergeordneten Knoten des Stammelements ab
- Geben Sie für jeden untergeordneten Knoten den Knotennamen und den Knotenwert des Textknotens aus
Browser-Unterschiede beim 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 und Weise, wie sie mit Leerzeichen und neuen Zeilen umgehen
DOM - Leerzeichen und neue Zeilen
XML enthält oft neue Zeilen oder Leerzeichen zwischen Knoten. Dies ist häufig der Fall, wenn das Dokument mit einem einfachen Editor wie Notepad bearbeitet wird.
Das folgende Beispiel (bearbeitet von Notepad) enthält CR/LF (neue Zeile) zwischen jeder Zeile und zwei Leerzeichen vor jedem untergeordneten 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 behandeln leere Leerzeichen oder neue Zeilen NICHT als Textknoten, während andere Browser dies tun.
Das folgende Beispiel gibt die Anzahl der untergeordneten Knoten aus, die das Stammelement (von books.xml ) hat. IE9 und früher geben 4 untergeordnete Knoten aus, während IE10 und spätere Versionen und andere Browser 9 untergeordnete Knoten ausgeben:
Beispiel
function myFunction(xml) {
var xmlDoc = xml.responseXML;
x =
xmlDoc.documentElement.childNodes;
document.getElementById("demo").innerHTML =
"Number
of child nodes: " + x.length;
}
PCDATA - Geparste Zeichendaten
XML-Parser analysieren normalerweise den gesamten Text in einem XML-Dokument.
Wenn ein XML-Element geparst wird, wird auch der Text zwischen den XML-Tags geparst:
<message>This text is also parsed</message>
Der Parser tut dies, weil XML-Elemente andere Elemente enthalten können, wie in diesem Beispiel, wo das <name>-Element zwei andere Elemente enthält (erstes und letztes):
<name><first>Bill</first><last>Gates</last></name>
und der Parser wird es wie folgt in Unterelemente aufteilen:
<name>
<first>Bill</first>
<last>Gates</last>
</name>
Geparste Zeichendaten (PCDATA) ist ein Begriff, der für Textdaten verwendet wird, die vom XML-Parser geparst werden.
CDATA - (Unparsed) Zeichendaten
Der Begriff CDATA wird für Textdaten verwendet, die nicht vom XML-Parser analysiert werden sollen.
Zeichen wie „<“ und „&“ sind in XML-Elementen unzulässig.
„<“ erzeugt einen Fehler, weil der Parser es als Beginn eines neuen Elements interpretiert.
"&" erzeugt einen Fehler, da der Parser es als Beginn einer Zeichenentität interpretiert.
Einige Texte, wie JavaScript-Code, enthalten viele „<“- oder „&“-Zeichen. Um Fehler zu vermeiden, kann Skriptcode als CDATA definiert werden.
Alles innerhalb eines CDATA-Abschnitts wird vom Parser ignoriert.
Ein CDATA-Abschnitt beginnt mit " <![CDATA[ " und endet mit " ]]> ":
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0)
{
return 1;
} else
{
return 0;
}
}
]]>
</script>
Im obigen Beispiel wird alles innerhalb des CDATA-Abschnitts vom Parser ignoriert.
Hinweise zu CDATA-Abschnitten:
Ein CDATA-Abschnitt darf nicht die Zeichenfolge "]]>" enthalten. Verschachtelte CDATA-Abschnitte sind nicht zulässig.
Das „]]>“, das das Ende des CDATA-Abschnitts markiert, darf keine Leerzeichen oder Zeilenumbrüche enthalten.