Parcours avec NodeIterator
Définition : NodeIterator
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
Syntaxe : createNodeIterator
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).
Exemple : Utilisation de l'objet NodeIterator
<racine>
<balise1>
<MonTag>Tag1</MonTag>
<MonTag>Tag2</MonTag>
</balise1>
<balise2>
<sousBalise2>
<MonTag>Tag3</MonTag>
<MonTag>Tag4</MonTag>
</sousBalise2>
</balise2>
</racine>
<racine> <balise1> <MonTag>Tag1</MonTag> <MonTag>Tag2</MonTag> </balise1> <balise2> <sousBalise2> <MonTag>Tag3</MonTag> <MonTag>Tag4</MonTag> </sousBalise2> </balise2> </racine>
//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());
}
//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()); }