XML -zelfstudie

XML HOME XML-introductie XML Hoe te gebruiken XML-structuur XML-syntaxis XML-elementen XML-kenmerken XML-naamruimten XML-weergave XML HTTP-verzoek XML-parser XML-DOM XML XPath XML XSLT XML XQuery XML XLink XML-validator XML-DTD XML Schema XML-server XML-voorbeelden XML-quiz XML-certificaat

XML AJAX

Ajax-introductie AJAX XMLHttp Ajax-verzoek Ajax-reactie AJAX XML-bestand AJAX PHP Ajax ASP AJAX-database AJAX-toepassingen Ajax-voorbeelden

XML-DOM

DOM-introductie DOM-knooppunten DOM-toegang DOM Node Info Lijst met DOM-knooppunten DOM doorkruisen DOM-navigatie DOM Waarden ophalen DOM-wijzigingsknooppunten DOM Knooppunten verwijderen DOM Knooppunten vervangen DOM Knooppunten maken DOM Knooppunten toevoegen DOM-kloonknooppunten DOM-voorbeelden

XPath- zelfstudie

XPath-introductie XPath-knooppunten XPath-syntaxis XPath-assen XPath-operators XPath-voorbeelden

XSLT- zelfstudie

XSLT-introductie XSL-talen XSLT-transformatie XSLT <sjabloon> XSLT <waarde-van> XSLT <voor elk> XSLT <sorteren> XSLT <if> XSLT <kiezen> XSLT toepassen XSLT op de client XSLT op de server XSLT Bewerk XML XSLT-voorbeelden

XQuery- zelfstudie

XQuery-introductie XQuery-voorbeeld XQuery FLWOR XQuery HTML XQuery-voorwaarden XQuery-syntaxis XQuery toevoegen XQuery selecteren XQuery-functies

XML -DTD

DTD Introductie DTD-bouwstenen DTD-elementen DTD-kenmerken DTD Elements vs Attr DTD-entiteiten DTD-voorbeelden

XSD- schema

XSD-introductie XSD Hoe kan ik? XSD <schema> XSD-elementen XSD-kenmerken XSD-beperkingen

XSD- complex

XSD-elementen XSD Leeg Alleen XSD-elementen Alleen XSD-tekst XSD gemengd XSD-indicatoren XSD <elke> XSD <anyAttribute> XSD-vervanging XSD-voorbeeld

XSD- gegevens

XSD-string XSD-datum XSD Numeriek XSD Diversen XSD-referentie

Webservices _

XML-services XML-WSDL XML SOAP XML-RDF XML-RSS

Referenties

Typen DOM-knooppunten DOM Node DOM-knooppuntlijst DOM NamedNodeMap DOM-document DOM-element DOM-kenmerk DOM-tekst DOM CDATA DOM-opmerking DOM XMLHttpRequest DOM-parser XSLT-elementen XSLT/XPath-functies

XML DOM Traverse Node Tree


Traverseren betekent een lus maken door of reizen over de knooppuntenboom.


De knooppuntenboom doorkruisen

Vaak wil je een XML-document herhalen, bijvoorbeeld: wanneer je de waarde van elk element wilt extraheren.

Dit heet "Door de knooppuntenboom gaan"

Het onderstaande voorbeeld loopt door alle onderliggende knooppunten van <boek> en geeft hun namen en waarden weer:

Voorbeeld

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

Uitgang:

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

Voorbeeld uitgelegd:

  1. Laad de XML-tekenreeks in xmlDoc
  2. Haal de onderliggende knooppunten van het root-element op
  3. Voer voor elk onderliggend knooppunt de naam van het knooppunt en de knooppuntwaarde van het tekstknooppunt uit


Browserverschillen in DOM-parsing

Alle moderne browsers ondersteunen de W3C DOM-specificatie.

Er zijn echter enkele verschillen tussen browsers. Een belangrijk verschil is:

  • De manier waarop ze omgaan met witruimtes en nieuwe regels

DOM - Witruimten en nieuwe lijnen

XML bevat vaak nieuwe regels of witruimtetekens tussen knooppunten. Dit is vaak het geval wanneer het document wordt bewerkt door een eenvoudige editor zoals Kladblok.

Het volgende voorbeeld (bewerkt door Kladblok) bevat CR/LF (nieuwe regel) tussen elke regel en twee spaties voor elk kindknooppunt:

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

Internet Explorer 9 en eerder behandelen GEEN lege spaties of nieuwe regels als tekstknooppunten, terwijl andere browsers dat wel doen.

Het volgende voorbeeld geeft het aantal onderliggende knooppunten weer dat het hoofdelement (van books.xml ) heeft. IE9 en eerder zullen 4 onderliggende knooppunten uitvoeren, terwijl IE10 en latere versies en andere browsers 9 onderliggende knooppunten zullen uitvoeren:

Voorbeeld

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

PCDATA - Geparseerde karaktergegevens

XML-parsers ontleden normaal gesproken alle tekst in een XML-document.

Wanneer een XML-element wordt geparseerd, wordt ook de tekst tussen de XML-tags geparseerd:

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

De parser doet dit omdat XML-elementen andere elementen kunnen bevatten, zoals in dit voorbeeld, waar het <name>-element twee andere elementen bevat (eerste en laatste):

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

en de parser zal het als volgt opsplitsen in subelementen:

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

Parsed Character Data (PCDATA) is een term die wordt gebruikt voor tekstgegevens die door de XML-parser worden geparseerd.


CDATA - (niet-geparseerde) tekengegevens

De term CDATA wordt gebruikt voor tekstgegevens die niet door de XML-parser moeten worden geparseerd.

Tekens zoals "<" en "&" zijn illegaal in XML-elementen.

"<" zal een fout genereren omdat de parser het interpreteert als het begin van een nieuw element.

"&" zal een fout genereren omdat de parser het interpreteert als het begin van een karakterentiteit.

Sommige tekst, zoals JavaScript-code, bevat veel "<"- of "&"-tekens. Om fouten te voorkomen, kan de scriptcode worden gedefinieerd als CDATA.

Alles binnen een CDATA-sectie wordt genegeerd door de parser.

Een CDATA-sectie begint met " <![CDATA[ " en eindigt met " ]]> ":

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

In het bovenstaande voorbeeld wordt alles in de CDATA-sectie genegeerd door de parser.

Opmerkingen over CDATA-secties:

Een CDATA-sectie mag de tekenreeks "]]> niet bevatten. Geneste CDATA-secties zijn niet toegestaan.

De "]]>" die het einde van de CDATA-sectie markeert, mag geen spaties of regeleinden bevatten.