Arbre de nœuds XML DOM Traverse
Traverser signifie boucler ou parcourir l'arborescence des nœuds.
Parcourir l'arborescence des nœuds
Souvent, vous souhaitez boucler un document XML, par exemple : lorsque vous souhaitez extraire la valeur de chaque élément.
C'est ce qu'on appelle "Parcourir l'arborescence des nœuds"
L'exemple ci-dessous parcourt tous les nœuds enfants de <book> et affiche leurs noms et valeurs :
Exemple
<!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>
Sortir:
title: Everyday Italian
author: Giada De Laurentiis
year: 2005
Exemple expliqué :
- Charger la chaîne XML dans xmlDoc
- Obtenir les nœuds enfants de l'élément racine
- Pour chaque nœud enfant, affichez le nom du nœud et la valeur de nœud du nœud de texte
Différences de navigateur dans l'analyse DOM
Tous les navigateurs modernes prennent en charge la spécification W3C DOM.
Cependant, il existe quelques différences entre les navigateurs. Une différence importante est :
- La façon dont ils gèrent les espaces blancs et les nouvelles lignes
DOM - Espaces blancs et nouvelles lignes
XML contient souvent des sauts de ligne, ou des espaces blancs, entre les nœuds. C'est souvent le cas lorsque le document est édité par un simple éditeur comme Notepad.
L'exemple suivant (édité par Notepad) contient CR/LF (nouvelle ligne) entre chaque ligne et deux espaces devant chaque nœud enfant :
<book>
<title>Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
Internet Explorer 9 et les versions antérieures ne traitent PAS les espaces blancs vides ou les nouvelles lignes comme des nœuds de texte, contrairement aux autres navigateurs.
L'exemple suivant affichera le nombre de nœuds enfants de l'élément racine (de books.xml ). IE9 et les versions antérieures généreront 4 nœuds enfants, tandis qu'IE10 et les versions ultérieures, ainsi que les autres navigateurs, généreront 9 nœuds enfants :
Exemple
function myFunction(xml) {
var xmlDoc = xml.responseXML;
x =
xmlDoc.documentElement.childNodes;
document.getElementById("demo").innerHTML =
"Number
of child nodes: " + x.length;
}
PCDATA - Données de caractères analysées
Les analyseurs XML analysent normalement tout le texte d'un document XML.
Lorsqu'un élément XML est analysé, le texte entre les balises XML est également analysé :
<message>This text is also parsed</message>
L'analyseur le fait parce que les éléments XML peuvent contenir d'autres éléments, comme dans cet exemple, où l'élément <name> contient deux autres éléments (premier et dernier) :
<name><first>Bill</first><last>Gates</last></name>
et l'analyseur le décomposera en sous-éléments comme ceci :
<name>
<first>Bill</first>
<last>Gates</last>
</name>
Parsed Character Data (PCDATA) est un terme utilisé à propos des données textuelles qui seront analysées par l'analyseur XML.
CDATA - Données de caractères (non analysées)
Le terme CDATA est utilisé pour les données textuelles qui ne doivent pas être analysées par l'analyseur XML.
Les caractères tels que "<" et "&" ne sont pas autorisés dans les éléments XML.
"<" générera une erreur car l'analyseur l'interprète comme le début d'un nouvel élément.
"&" générera une erreur car l'analyseur l'interprète comme le début d'une entité de caractère.
Certains textes, comme le code JavaScript, contiennent de nombreux caractères "<" ou "&". Pour éviter les erreurs, le code de script peut être défini comme CDATA.
Tout ce qui se trouve à l'intérieur d'une section CDATA est ignoré par l'analyseur.
Une section CDATA commence par " <![CDATA[ " et se termine par " ]]> " :
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0)
{
return 1;
} else
{
return 0;
}
}
]]>
</script>
Dans l'exemple ci-dessus, tout ce qui se trouve dans la section CDATA est ignoré par l'analyseur.
Remarques sur les sections CDATA :
Une section CDATA ne peut pas contenir la chaîne "]]>". Les sections CDATA imbriquées ne sont pas autorisées.
Le "]]>" qui marque la fin de la section CDATA ne peut pas contenir d'espaces ou de sauts de ligne.