Parcourir l'arbre des nœuds du DOM XML
- Page précédente Liste des nœuds DOM
- Page suivante Détermination des nœuds DOM
Parcourir (Traverse) signifie parcourir l'arbre des nœuds.
Parcourir l'arbre des nœuds
Vous avez souvent besoin de parcourir un document XML, par exemple : lorsque vous souhaitez extraire la valeur de chaque élément.
Ce processus s'appelle « parcourir l'arbre des nœuds »
L'exemple suivant parcourt tous les éléments enfants de <book> et affiche leurs noms et valeurs :
Exemple
<!DOCTYPE html> <html> <body> <script> <p id="demo"></p> 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"); x = xmlDoc.documentElement.childNodes; // documentElement représente toujours le noeud racine for (i = 0; i < x.length ;i++) { } txt += x[i].nodeName + ": " + x[i].childNodes[0].nodeValue + "<br>"; </script> document.getElementById("demo").innerHTML = txt; </body>
</html>
- Exemple d'explication :
Charger une chaîne de caractères XML dans
xmlDoc - Obtenez les noeuds enfants de l'élément racine
- Affichez le nom de chaque noeud enfant ainsi que la valeur du noeud de texte
Les différences des navigateurs dans l'analyse DOM
Tous les navigateurs modernes supportent la norme W3C DOM.
Cependant, il existe des différences entre les navigateurs.
La manière dont ils traitent les espaces et les retours chariot
DOM - Espaces et retours chariot
L'XML inclut généralement des retours chariot ou des caractères blancs entre les noeuds. Lorsque le document est édité avec des éditeurs simples tels que le Bloc-notes, cela se produit généralement.
L'exemple suivant (édité dans le Bloc-notes) contient des CR/LF (caractères de retour chariot/fin de ligne) entre chaque ligne et deux espaces devant chaque noeud enfant :
<book> <title>雅舍谈吃</title> <author>梁实秋</author> <press>江苏文艺出版社</press> <year>2013</year> <price>35</price> <ISBN>9787539962771</ISBN> </book>
Internet Explorer 9 et les versions antérieures ne considèrent pas les espaces ou les nouvelles lignes comme des nœuds de texte, tandis que les autres navigateurs le font.
L'exemple suivant affichera le nombre de noeuds enfants de l'élément racine (books.xml). Les versions IE9 et antérieures afficheront 6 noeuds enfants, tandis que les versions IE10 et suivantes ainsi que les autres navigateurs afficheront 9 noeuds enfants :
Exemple
function myFunction(xml) { var xmlDoc = xml.responseXML; x = xmlDoc.documentElement.childNodes; document.getElementById("demo").innerHTML = "Nombre de sous-nœuds : " + x.length; }
PCDATA - Données de caractères analysées (Parsed Character Data)
Les analyseurs XML analysent généralement tous les textes dans le document XML.
Lors de l'analyse des éléments XML, le texte entre les balises XML est également analysé :
<message>Ce texte sera également analysé</message>
L'analyseur effectue cette opération 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 (first et last) :
<name><first>Bill</first><last>Gates</last></name>
L'analyseur le décompose en sous-éléments suivants :
<name> <first>Bill</first> <last>Gates</last> </name>
Le terme "Analyse des données de caractères" (PCDATA) est utilisé pour décrire les données de texte qui seront analysées par l'analyseur XML.
CDATA - Données de caractères non analysées (Unparsed Character Data)
Le terme CDATA est utilisé pour décrire les données de texte qui ne devraient pas être analysées par l'analyseur XML.
"<
" et "&
Les caractères " sont illégaux dans les éléments XML.
"<
" entraînera une erreur, car l'analyseur le considère comme le début d'un nouvel élément.
"&
" entraînera une erreur, car l'analyseur le considère comme le début d'un entité de caractères.
Certains textes (par exemple, le code JavaScript) contiennent beaucoup de "<
" ou "&
" Pour éviter les erreurs, vous pouvez définir le code de script en tant que CDATA.
Tous les contenus à l'intérieur de la partie CDATA seront ignorés par l'analyseur.
" Partie CDATA avec "<![CDATA[
" Début, avec "]]>
" Fin :
<script> <![CDATA[ function matchwo(a,b) { if (a < b && a < 0) { return 1; else { return 0; } } ]]> </script>
Dans l'exemple ci-dessus, l'analyseur ignore tout le contenu à l'intérieur de la section CDATA.
Remarques sur les sections CDATA :
La section CDATA ne peut pas contenir la chaîne "]]>
". Les sections CDATA imbriquées ne sont pas autorisées.
" marquant la fin de la section CDATA]]>
" ne peut pas contenir d'espaces ou de retours à la ligne.
- Page précédente Liste des nœuds DOM
- Page suivante Détermination des nœuds DOM