Localisation des nœuds XML DOM

Les nœuds peuvent être localisés en utilisant les relations entre les nœuds.

Exemple

L'exemple suivant utilise un fichier XML books.xml.

Fonction loadXMLDoc()Localisé dans JavaScript externe, utilisé pour charger des fichiers XML.

Obtenir le parent d'un nœud
Dans cet exemple, l'attribut parentNode est utilisé pour obtenir le parent du nœud.
Obtenir le premier enfant du nœud
Dans cet exemple, la méthode firstChild() et une fonction personnalisée sont utilisées pour obtenir le premier enfant d'un nœud.

Localiser les nœuds DOM

Accéder aux nœuds de l'arbre de nœuds via les relations entre les nœuds, ce qui est généralement appelé localisation de nœuds ("navigating nodes").

Dans XML DOM, les relations entre les nœuds sont définies par les attributs des nœuds :

  • parentNode
  • childNodes
  • firstChild
  • lastChild
  • nextSibling
  • previousSibling

L'image suivante montre books.xml Une partie de l'arbre de nœuds, et explique les relations entre les nœuds :

Arbre de nœuds DOM

DOM - Parent

Tous les nœuds ont un seul parent. Le code suivant localise le parent du <book> :

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.getElementsByTagName("book")[0];
document.write(x.parentNode.nodeName);

Explication de l'exemple :

  • En utilisant loadXMLDoc() "books.xml" est chargé dans xmlDoc
  • Obtenir l'élément <book> premier
  • Sortir le nom du nœud parent de "x"

TIY

Éviter les nœuds de texte vides

Firefox et d'autres navigateurs considèrent les espaces et les retours chariots vides comme des nœuds de texte, tandis que IE ne le fait pas.

Cela pose un problème lors de l'utilisation des attributs suivants : firstChild, lastChild, nextSibling, previousSibling.

Pour éviter de se localiser sur un nœud de texte vide (les espaces et les retours chariots entre les nœuds élément), nous utilisons une fonction pour vérifier le type du nœud :

function get_nextSibling(n)
{
y=n.nextSibling;
while (y.nodeType!=1)
  {
  y=y.nextSibling;
  }
return y;
}

Avec la fonction ci-dessus, nous pouvons utiliser get_nextSibling(node) pour remplacer l'attribut node.nextSibling.

Explication du code :

Le type de nœud de l'élément est 1. Si le nœud de même niveau n'est pas un nœud élément, il est déplacé au prochain nœud jusqu'à ce qu'un nœud élément soit trouvé. De cette manière, dans IE et Firefox, les mêmes résultats peuvent être obtenus.

Obtenir le premier élément

Le code suivant affiche le premier élément de <book> :

<html>
<head>
<script type="text/javascript" src="loadxmldoc.js">
</script>
<script type="text/javascript">
//vérifier si le premier nœud est un nœud élément
function get_firstChild(n)
{
y=n.firstChild;
while (y.nodeType!=1)
  {
  y=y.nextSibling;
  }
return y;
}
</script>
</head>
<body>
<script type="text/javascript">
xmlDoc=loadXMLDoc("books.xml");
x=get_firstChild(xmlDoc.getElementsByTagName("book")[0]);
document.write(x.nodeName);
</script>
</body>
</html>

Sortie :

title

Explication de l'exemple :

  • En utilisant loadXMLDoc() "books.xml"Chargé dans xmlDoc"
  • Utilisez la fonction get_firstChild sur le premier <book> pour obtenir le premier noeud enfant du noeud élément
  • Sortie du nom du premier noeud enfant (appartenant à un noeud élément)

TIY

Exemple

L'exemple suivant utilise des fonctions similaires :

  • firstChild: TIY
  • lastChild: TIY
  • nextSibling: TIY
  • previousSibling: TIY