Parcourir un arbre DOM

Problème

Vous voulez appliquer une opération sur tous les nœuds d’un arbre DOM.

Solution

Appliquez un algorithme de parcours d’arbre et effectuez l’action sur chaque nœud parcouru.

Discussion

Voici un algorithme de parcours, dit méthode d’itération post-ordre, qui travaille d’abord sur la descendance d’un nœud puis regarde les frères de ce nœud. L’action n’a lieu que quand tous les nœuds fils ont été traités.


void 
traverse (xmlNodePtr node) 
{ 
  xmlNodePtr n; 
  for (n = node; n; n = n->next) 
    { 
      if ((n->type == XML_ELEMENT_NODE) && (n->children)) 
        traverse (n->children); 
      proceed (n); 
    } 
}
 

Nous pouvons appeler cette fonction sur le nœud racine, afin de parcourir l’arbre en entier. L’action est effectuée via la fonction proceed(). Par exemple, pour afficher le contenu des nœuds textes (ou CDATA), utilisez une fonction comme celle-ci :


void 
proceed (xmlNodePtr node) 
{ 
  if ((node->type == XML_CDATA_SECTION_NODE) 
      || (node->type == XML_TEXT_NODE)) 
    { 
      xmlChar *path = xmlGetNodePath (node); 
      printf ("%s -> '%s'\n", path, 
              node->content ? (char *) node->content : "(null)"); 
      xmlFree (path); 
    } 
}
 

Cette fonction utilise la fonction xmlGetNodePath() pour obtenir le chemin du nœud traité. Pour les différents...

Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Supprimer un nœud d'un arbre DOM
Suivant
Rechercher un nœud ou un ensemble de nœuds avec XPath dans un arbre DOM