Parcourir un arbre DOM en Java

Sélection et recherche par XPath

Le parcours d'un arbre peut également se faire à l'aide d'XPath. Il faut pour cela utiliser le package javax.xml.xpath.*

ExempleCréation d'un Objet XPath

CTRL+C pour copier, CTRL+V pour coller
1
XPath xpath = XPathFactory.newInstance().newXPath();
XPath xpath = XPathFactory.newInstance().newXPath();

Méthode

Trois possibilités :

  • Lecture d'une chaîne de caractères

  • Lecture d'un nœud

  • Lecture d'une liste de nœuds

ExempleParsing du fichier XML avec XPath - Lecture d'une chaîne de caractères

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
try 
2
{
3
			String expression = null; 
4
			
5
			//lecture d'une chaîne de caractère
6
			expression = "/racine/balise1/MonTag";
7
			String maChaine = xPath.compile(expression).evaluate(document);
8
			System.out.println(maChaine+"\n");
9
}
10
catch (XPathExpressionException e)
11
{
12
		System.out.println("Erreur dans le XPath");
13
		e.printStackTrace();
14
}
try 
{
			String expression = null; 
			
			//lecture d'une chaîne de caractère
			expression = "/racine/balise1/MonTag";
			String maChaine = xPath.compile(expression).evaluate(document);
			System.out.println(maChaine+"\n");
}
catch (XPathExpressionException e)
{
		System.out.println("Erreur dans le XPath");
		e.printStackTrace();
}
CTRL+C pour copier, CTRL+V pour coller
1
//Résultat obtenu
2
Tag1
//Résultat obtenu
Tag1

ExempleParsing du fichier XML avec XPath - Lecture d'un nœud

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
try 
2
{
3
			String expression = null; 
4
5
			//lecture d'un noeud
6
			expression = "/racine/balise1";
7
			Node node = (Node) xPath.compile(expression).evaluate(document, XPathConstants.NODE);
8
			System.out.println(((Element) node).getFirstChild().getTextContent()+"\n");
9
}
10
catch (XPathExpressionException e)
11
{
12
		System.out.println("Erreur dans le XPath");
13
		e.printStackTrace();
14
}
try 
{
			String expression = null; 

			//lecture d'un noeud
			expression = "/racine/balise1";
			Node node = (Node) xPath.compile(expression).evaluate(document, XPathConstants.NODE);
			System.out.println(((Element) node).getFirstChild().getTextContent()+"\n");
}
catch (XPathExpressionException e)
{
		System.out.println("Erreur dans le XPath");
		e.printStackTrace();
}
CTRL+C pour copier, CTRL+V pour coller
1
//Résultat obtenu
2
Tag1
//Résultat obtenu
Tag1

ExempleParsing du fichier XML avec XPath - Lecture d'une liste de nœuds

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
try 
2
{
3
			String expression = null; 
4
			
5
			//lecture d'une liste de noeuds
6
			expression = "//MonTag";
7
			NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(document, XPathConstants.NODESET);
8
			Element element = null;
9
			for(int i=0; i<nodeList.getLength(); i++)
10
			{
11
			     element = (Element) nodeList.item(i);
12
			     System.out.println(element.getTextContent());
13
			}
14
		
15
}
16
catch (XPathExpressionException e)
17
{
18
		System.out.println("Erreur dans le XPath");
19
		e.printStackTrace();
20
}
try 
{
			String expression = null; 
			
			//lecture d'une liste de noeuds
			expression = "//MonTag";
			NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(document, XPathConstants.NODESET);
			Element element = null;
			for(int i=0; i<nodeList.getLength(); i++)
			{
			     element = (Element) nodeList.item(i);
			     System.out.println(element.getTextContent());
			}
		
}
catch (XPathExpressionException e)
{
		System.out.println("Erreur dans le XPath");
		e.printStackTrace();
}
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)