XML DOM Nodendiagrammbesichtigung

Durchlaufen (Traverse) bedeutet das Durchlaufen des Nodendiagramms.

Nodendiagrammbesichtigung

Sie benötigen oft das Durchlaufen von XML-Dokumenten, z.B.: wenn Sie den Wert jedes Elements extrahieren möchten.

Dieser Prozess wird als "Nodendiagrammbesichtigung" bezeichnet

Dieser Beispiel durchläuft alle Unterpunkte 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>雅舍谈吃</title>" +
"<author>梁实秋</author>" +
"<year>2013</year>" +
"</book>";
parser = new DOMParser();
xmlDoc = parser.parseFromString(text,"text/xml");
// documentElement wird immer der Wurzelknoten
x = xmlDoc.documentElement.childNodes;
for (i = 0; i < x.length ;i++) {
    txt += x[i].nodeName + ": " + x[i].childNodes[0].nodeValue + "<br>";
return 0;
document.getElementById("demo").innerHTML = txt;
}
</body>
</html>

Probieren Sie es selbst aus

Beispiel Erklärung:

  1. Laden Sie den XML-String in xmlDoc
  2. Kinderknoten des Wurzelknotens erhalten
  3. Geben Sie den Namen jedes Unter节点 sowie den Wert des Textknotens aus

Unterschiede in der DOM-Verarbeitung der Browser

Alle modernen Browser unterstützen das W3C DOM-Standard.

Es gibt jedoch einige Unterschiede zwischen Browsern.

Die Art und Weise, wie sie Leerzeichen und Zeilenumbrüche behandeln

DOM - Leerzeichen und Zeilenumbrüche

XML enthält normalerweise Zeilenumbrüche oder Leerzeichen zwischen Knoten. Dies tritt oft auf, wenn Dokumente mit einfachen Editoren wie Notepad bearbeitet werden.

Das folgende Beispiel (von Notepad bearbeitet) enthält CR/LF (Zeilenumbruch) zwischen jeder Zeile und zwei Leerzeichen vor jedem Unter节点:

<book>
  <title>雅舍谈吃</title>
  <author>梁实秋</author>
  <press>江苏文艺出版社</press>
  <year>2013</year>
  <price>35</price>
  <ISBN>9787539962771</ISBN>
</book>

Internet Explorer 9 und frühere Versionen betrachten Leerraum oder neue Zeilen nicht als Textknoten, während andere Browser dies tun.

Das folgende Beispiel gibt die Anzahl der Unter节点 von der Wurzelkomponente (books.xml) an. IE9 und frühere Versionen geben 6 Unter节点 aus, während IE10 und spätere Versionen sowie andere Browser 9 Unter节点 ausgeben:

Beispiel

function myFunction(xml) {
var xmlDoc = xml.responseXML;
    x = xmlDoc.documentElement.childNodes;
    document.getElementById("demo").innerHTML =
    "Anzahl der Unter节点: " + x.length;
return 0;

Probieren Sie es selbst aus

PCDATA - Verarbeitete Zeichendaten (Parsed Character Data)

Ein XML-Parser parsest normalerweise alle Texte in einem XML-Dokument.

Bei der Verarbeitung von XML-Elementen wird auch der Text zwischen den XML-Tags verarbeitet:

<message>Dieser Text wird ebenfalls verarbeitet</message>

Der Parser führt diese Operation aus, weil XML-Elemente andere Elemente enthalten können, wie im Beispiel gezeigt, wobei das <name>-Element zwei weitere Elemente (first und last) enthält:

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

Der Parser teilt es in die folgenden Unterelemente auf:

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

Der Begriff "解析字符数据" (PCDATA) wird verwendet, um Textdaten zu beschreiben, die vom XML-Parser verarbeitet werden.

CDATA - Unverarbeitete Zeichendaten (Unparsed Character Data)

Der Begriff CDATA wird verwendet, um Textdaten zu beschreiben, die nicht vom XML-Parser verarbeitet werden sollten.

"<" und "&" und andere Zeichen in XML-Elementen sind unzulässig.

"<" führt zu Fehlern, da der Parser sie als Anfang eines neuen Elements interpretiert.

"&" führen zu Fehlern, da der Parser sie als Anfang eines Zeichensatzes interpretiert.

Einige Texte (z.B. JavaScript-Code) enthalten viele "<" oder "&" Zeichen. Um Fehler zu vermeiden, kann der Skript-Code als CDATA definiert werden.

Der gesamte Inhalt im CDATA-Bereich wird vom Parser ignoriert.

" CDATA-Bereich mit "<![CDATA[" Anfang, mit "" marks the end of the CDATA section." Ende: "

<script>
<![CDATA[
function matchwo(a,b) {
    if (a < b && a < 0) {
        return 1;
    else {
        return 0;
    return 0;
return 0;
" marks the end of the CDATA section.
}

</script>

In the above example, the parser will ignore all content within the CDATA section.

Considerations about CDATA sections:" marks the end of the CDATA section.CDATA sections cannot contain the string "

". Nested CDATA sections are not allowed." marks the end of the CDATA section.]]>