Parcourir un arbre DOM en Java

Parcours avec NodeIterator

DéfinitionNodeIterator

L'interface NodeIterator permet de parcourir un arbre DOM en utilisant une représentation horizontale du document.

NodeIterator permet d'obtenir chacun des nœuds à tour de rôle.

Pour obtenir un objet de type NodeIterator, il faut utiliser la méthode createNodeIterator de l'interface DocumentTraversal

SyntaxecreateNodeIterator

NodeIterator createNodeIterator(Node root, int whatToShow, NodeFilter filter, boolean entityReferenceExpansion)

  • Node root : le parcours commencera à partir de ce nœud. Le NodeIterator est initialement positionné avant le noeud.

  • int whatToShow : permet de spécifier le ou les types de nœuds obtenus lors du parcours. Les valeurs possibles sont les constantes commençant par SHOW_  (Par exemple SHOW_ALL, SHOW_ELEMENT, SHOW_ATTRIBUTE). Plusieurs valeurs peuvent être combinées avec un opérateur OR.

  • NodeFilter filter : une implémentation de type NodeFilter permet d'appliquer un filtre supplémentaire sur les nœuds obtenus lors du parcours.

  • boolean entityReferenceExpansion : booléen indiquant si les nœuds de type EntityReference sont visibles pour l'itérateur (laisser à true de manière générale).

ExempleUtilisation de l'objet NodeIterator

CTRL+C pour copier, CTRL+V pour coller
1
<racine>
2
     <balise1>
3
          <MonTag>Tag1</MonTag>
4
          <MonTag>Tag2</MonTag>
5
     </balise1>
6
     <balise2>
7
          <sousBalise2>
8
               <MonTag>Tag3</MonTag>
9
               <MonTag>Tag4</MonTag>
10
          </sousBalise2>
11
     </balise2>
12
</racine>
<racine>
     <balise1>
          <MonTag>Tag1</MonTag>
          <MonTag>Tag2</MonTag>
     </balise1>
     <balise2>
          <sousBalise2>
               <MonTag>Tag3</MonTag>
               <MonTag>Tag4</MonTag>
          </sousBalise2>
     </balise2>
</racine>
CTRL+C pour copier, CTRL+V pour coller
1
//L'interface DocumentTraversal permet de créer un objet NodeIterator
2
DocumentTraversal traversal = (DocumentTraversal) document;
3
4
//document.getDocumentElement() retourne la racine du document
5
//NodeFilter.SHOW_ELEMENT permet de spécifier que l'on souhaite des noeuds de types Element
6
//Le troisième paramètre null indique qu'on n'utilise pas de filtre supplémentaire
7
NodeIterator iterator = traversal.createNodeIterator(
8
     document.getDocumentElement(), NodeFilter.SHOW_ELEMENT, null, true);
9
      
10
for (Node n = iterator.nextNode(); n != null; n = iterator.nextNode())
11
{
12
     if(n.getNodeName().equals("MonTag"))
13
          System.out.println(n.getTextContent());
14
}
//L'interface DocumentTraversal permet de créer un objet NodeIterator
DocumentTraversal traversal = (DocumentTraversal) document;

//document.getDocumentElement() retourne la racine du document
//NodeFilter.SHOW_ELEMENT permet de spécifier que l'on souhaite des noeuds de types Element
//Le troisième paramètre null indique qu'on n'utilise pas de filtre supplémentaire
NodeIterator iterator = traversal.createNodeIterator(
     document.getDocumentElement(), NodeFilter.SHOW_ELEMENT, null, true);
      
for (Node n = iterator.nextNode(); n != null; n = iterator.nextNode())
{
     if(n.getNodeName().equals("MonTag"))
          System.out.println(n.getTextContent());
}
CTRL+C pour copier, CTRL+V pour coller
1
//Résultat obtenu
2
Tag1
3
Tag2
4
Tag3
5
Tag4
//Résultat obtenu
Tag1
Tag2
Tag3
Tag4
PrécédentPrécédentSuivantSuivant
AccueilAccueilImprimerImprimer Etienne Chognard, Nicolas Lhome, Kévin Jezequell 2014-2016 (Contributions : Stéphane Crozat, les étudiants de NF29) Paternité - Partage des Conditions Initiales à l'IdentiqueRéalisé avec Scenari (nouvelle fenêtre)