Samouczek XML

Strona główna XML Wprowadzenie do XML XML Jak używać Drzewo XML Składnia XML Elementy XML Atrybuty XML Przestrzenie nazw XML Wyświetlacz XML Żądanie HTTP XML Parser XML XML DOM XML XPath XML XSLT XML XQuery XML XLink Walidator XML XML DTD Schemat XML Serwer XML Przykłady XML Quiz XML Certyfikat XML

XML AJAX

Wprowadzenie do AJAX AJAX XMLHttp Żądanie AJAX Odpowiedź AJAX Plik XML AJAX AJAX PHP ASP AJAX Baza danych AJAX Aplikacje AJAX Przykłady AJAX

XML DOM

Wprowadzenie do DOM Węzły DOM Dostęp do DOM Informacje o węźle DOM Lista węzłów DOM Przechodzenie DOM Nawigacja DOM DOM Uzyskaj wartości Zmiana węzłów DOM DOM Usuń węzły DOM Zamień węzły DOM Utwórz węzły DOM Dodaj węzły Węzły klonowania DOM Przykłady DOM

Samouczek XPath

Wprowadzenie do XPath Węzły XPath Składnia XPath Osie XPath Operatorzy XPath Przykłady XPath

Samouczek XSLT

Wprowadzenie XSLT Języki XSL Transformacja XSLT XSLT <szablon> XSLT <wartość-z> XSLT <dla każdego> XSLT <sortuj> XSLT <jeśli> XSLT <wybierz> XSLT Zastosuj XSLT na kliencie XSLT na serwerze XSLT Edytuj XML Przykłady XSLT

Samouczek XQuery

Wprowadzenie do XQuery Przykład XQuery XQuery FLWOR XQuery HTML Warunki XQuery Składnia XQuery XQuery Dodaj XQuery Wybierz Funkcje XQuery

XML DTD

Wprowadzenie do DTD Bloki konstrukcyjne DTD Elementy DTD Atrybuty DTD Elementy DTD a Attr Jednostki DTD Przykłady DTD

Schemat XSD

Wprowadzenie do XSD XSD Jak to zrobić XSD <schemat> Elementy XSD Atrybuty XSD Ograniczenia XSD

Kompleks XSD

Elementy XSD XSD Pusty Tylko elementy XSD Tylko tekst XSD Mieszane XSD Wskaźniki XSD XSD <dowolny> XSD <dowolnyAtrybut> Zastąpienie XSD Przykład XSD

Dane XSD

XSD ciąg Data XSD Numeryczne XSD XSD Różne Odniesienie XSD

Usługi internetowe

Usługi XML XML WSDL MYDŁO XML XML RDF XML RSS

Bibliografia

Typy węzłów DOM Węzeł DOM Lista węzłów DOM DOM NamedNodeMap Dokument DOM Element DOM Atrybut DOM Tekst DOM DOM CDATA Komentarz DOM DOM XMLHttpRequest Analizator DOM Elementy XSLT Funkcje XSLT/XPath

Drzewo węzłów przechodzenia XML DOM


Przechodzenie oznacza pętlę lub podróżowanie po drzewie węzłów.


Przemierzanie drzewa węzłów

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

Nazywa się to „Przechodzeniem po drzewie węzłów”

Poniższy przykład przechodzi przez wszystkie węzły podrzędne <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>

Wyjście:

title: Everyday Italian
author: Giada De Laurentiis
year: 2005

Przykład wyjaśniony:

  1. Załaduj ciąg XML do xmlDoc
  2. Pobierz węzły potomne elementu głównego
  3. Dla każdego węzła podrzędnego wypisz nazwę węzła i wartość węzła węzła tekstowego


Różnice przeglądarek w analizie DOM

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

Istnieją jednak pewne różnice między przeglądarkami. Jedna ważna różnica to:

  • Sposób, w jaki radzą sobie z białymi znakami i nowymi liniami

DOM - Białe przestrzenie i nowe linie

XML często zawiera nowe wiersze lub znaki odstępu między węzłami. Dzieje się tak często, gdy dokument jest edytowany za pomocą prostego edytora, takiego jak Notatnik.

Poniższy przykład (edytowany przez Notatnik) zawiera CR/LF (nowa linia) między każdą linią i dwiema spacjami przed każdym węzłem podrzędnym:

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

Internet Explorer 9 i starsze wersje NIE traktują pustych spacji ani nowych wierszy jako węzłów tekstowych, podczas gdy inne przeglądarki to robią.

Poniższy przykład wyświetli liczbę węzłów podrzędnych, które ma element główny ( books.xml ). IE9 i starsze wersje wygenerują 4 węzły podrzędne, podczas gdy IE10 i nowsze wersje oraz inne przeglądarki wygenerują 9 węzłów podrzędnych:

Przykład

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

PCDATA — przeanalizowane dane znakowe

Parsery XML zwykle analizują cały tekst w dokumencie XML.

Podczas analizowania elementu XML analizowany jest również tekst między znacznikami XML:

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

Parser robi to, ponieważ elementy XML mogą zawierać inne elementy, jak w tym przykładzie, gdzie element <name> zawiera dwa inne elementy (pierwszy i ostatni):

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

a parser podzieli go na podelementy w ten sposób:

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

Parsed Character Data (PCDATA) to termin używany w odniesieniu do danych tekstowych, które będą analizowane przez parser XML.


CDATA — (nieprzeanalizowane) dane znakowe

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

Znaki takie jak „<” i „&” są niedozwolone w elementach XML.

"<" wygeneruje błąd, ponieważ parser zinterpretuje go jako początek nowego elementu.

„&” wygeneruje błąd, ponieważ parser zinterpretuje go jako początek encji znakowej.

Niektóre teksty, takie jak kod JavaScript, zawierają dużo znaków „<” lub „&”. Aby uniknąć błędów, kod skryptu można zdefiniować jako CDATA.

Wszystko w sekcji CDATA jest ignorowane przez parser.

Sekcja CDATA zaczyna się od „ <![CDATA[ ” i kończy się na „ ]]> ”:

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

W powyższym przykładzie wszystko w sekcji CDATA jest ignorowane przez parser.

Uwagi dotyczące sekcji CDATA:

Sekcja CDATA nie może zawierać ciągu „]]>”. Zagnieżdżone sekcje CDATA są niedozwolone.

Znak „]]>” oznaczający koniec sekcji CDATA nie może zawierać spacji ani podziałów wierszy.