Najnowsze tutoriale tworzenie stron internetowych
 

XML DOM trawers węzła drzewa


Przejazd środkami przelotowego lub podróżowanie po drzewie węzłów.


Ruch Drzewo Node

Często chcesz pętli dokumentu XML, na przykład: gdy chcemy wyodrębnić wartość każdego elementu.

To się nazywa "Traversing the node tree"

Poniższy przykład pętle za pośrednictwem wszystkich węzłów potomnych <book> i wyświetla ich nazwy i wartości:

Przykład

<!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>

Wydajność:

title: Everyday Italian
author: Giada De Laurentiis
year: 2005
Spróbuj sam "

Przykład wyjaśnił:

  1. Załaduj ciąg XML do xmldoc
  2. Uzyskaj węzły podrzędne elementu głównego
  3. Dla każdego węzła potomnego, wyjście nazwy węzła i wartością węzła węzła tekstowego

Różnice Browser w DOM parsowania

Wszystkie nowoczesne przeglądarki obsługują specyfikację W3C DOM.

Istnieją jednak pewne różnice między przeglądarkami. Jedną ważną różnicą jest to:

  • Sposób, w jaki radzą sobie biało-przestrzenie i nowe linie

DOM - spacji i nowych linii

XML często zawiera nową linię lub białe znaki, pomiędzy węzłami. Jest to często miejsce w przypadku, gdy dokument jest edytowany za pomocą prostego edytora jak Notatnik.

Poniższy przykład (edited by Notepad) zawiera CR / LF (new line) między poszczególnymi wierszami i dwoma miejscami z przodu każdego węzła potomnego:

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

Internet Explorer 9 i wcześniejszych Nie traktuj pustych biało-przestrzenie, czy nowe linie jak węzły tekstowe, podczas gdy inne przeglądarki robić.

Poniższy przykład wyświetli liczbę węzłów dziecko element główny (of books.xml ) ma. IE9 i wcześniejsze wyjście wola 4 węzły potomne, a IE10 i nowsze wersje, a inne przeglądarki wyjście będzie 9 węzłów potomnych:

Przykład

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

PCDATA - analizowany postaci danych

parser XML normalnie zanalizować cały tekst w dokumencie XML.

Gdy element XML jest analizowany tekst pomiędzy znacznikami XML jest również analizowane:

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

Parser ma tego powodu elementy XML mogą zawierać inne elementy, jak w tym przykładzie, gdzie <name> element zawiera dwa inne elementy (first and last) :

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

a parser złamie go na pod-elementów, takich jak ten:

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

Przeanalizowane dane znakowe (PCDATA) jest terminem używanym na temat danych tekstowych, które będą przetwarzane przez parser XML.


CDATA - (Unparsed) Dane znakowe

Termin CDATA jest używany o danych tekstowych, które nie powinny być analizowane przez parser XML.

Postacie takie jak "<" i "&" są nielegalne w elementach XML.

"<" Wygeneruje błąd, ponieważ parser interpretuje ją jako początek nowego elementu.

"&" Wygeneruje błąd, ponieważ parser interpretuje ją jako początek podmiotu znaków.

Część tekstu, podobnie jak kod JavaScript, zawiera dużo "<" lub "&" znaków. Aby uniknąć błędów kod skryptu można zdefiniować jako CDATA.

Wszystko wewnątrz sekcji CDATA jest ignorowane przez parser.

Sekcja CDATA zaczyna się od " <![CDATA[ " and ends with " ]]> " :

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

W powyższym przykładzie, wszystko wewnątrz sekcji CDATA jest ignorowane przez parser.

Notes on CDATA sections:

Sekcja CDATA nie może zawierać napis "]]>" . zagnieżdżone sekcje CDATA nie są akceptowane.

"]]>" , Która oznacza koniec sekcji CDATA nie może zawierać spacji ani podziałów wierszy.