Galactic Civilizations 3
Parser un XML en Java

Parser un XML en Java

Catégorie: Programmation.
Posté par le 25/12/2013.
Dernière mise à jour le 25/12/2013.

Description

Dans ce tutoriel, vous apprendrez comment parser un XML à l'aide de xpath en Java.

Introduction

Ce tutoriel peut être réalisé à l'aide d'un simple éditeur de texte ou d'un IDE tels qu'Eclipse ou Netbeans. Il nécessite des connaissances de base en Java.

L’XML qui sera utilisé pour notre tutoriel, est le suivant:

<?xml version="1.0" encoding="ISO-8859-1"?>
<tutoriels>
   <tutoriel id="1">
      <titre
lang="en" >My tutorial</titre>
   </tutoriel>
   <tutoriel
id="2">
      <titre
lang="fr" >Mon tutoriel</titre>
   </tutoriel>
</tutoriels>

Récupérer la valeur d'un élément à l'aide d'un xpath

Afin de récupérer la valeur de l'élément « titre », nous allons utiliser la méthode « evaluate » de l'objet XPath.
Dans notre premier exemple, le fichier XML sera sous forme d'une String.

Le xpath « //titre[@lang='fr']/text() » permet de récupérer la valeur de l'élément « titre » qui possède la valeur « fr » pour l'attribut "lang".
Voici le code de notre premier exemple:

import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.xml.sax.InputSource;
import java.io.StringReader;

public class MaClasse {
   public static void main(String[] args) {
      String xml="<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>";
      xml+="<tutoriels>";
      xml+="<tutoriel id=\"1\">";
      xml+="<titre lang=\"en\" >My tutorial</titre>";
      xml+="</tutoriel>";
      xml+="<tutoriel id=\"2\">";
      xml+="<titre lang=\"fr\" >Mon tutoriel</titre>";
      xml+="</tutoriel>";
      xml+="</tutoriels>";
      
      try{
         XPathFactory factory = XPathFactory.newInstance();
         XPath xPath = factory.newXPath();
         String titre = (String) xPath.evaluate("//titre[@lang='fr']/text()", new InputSource(new StringReader(xml)));
         System.out.println(titre);
      }catch(XPathExpressionException e){
         e.printStackTrace();
      }
   }
}

Parser le fichier XML

Une autre manière pour parser les fichiers XML, consiste à utiliser la classe « DocumentBuilder ».
Cette classe permet de parser le fichier XML. Celui-ci sera ensuite utilisé par la méthode « evaluate » de l'objet « XPathExpression ».

Comme vous pouvez le voir dans les exemples ci-dessous, la méthode « evaluate » prend comme arguments:

  • Le document XML;
  • Le format de retour de la méthode;
    • Le format de retour défini dans la classe « XPathConstants » peut être:
      • XPathConstants.STRING: La méthode retournera une chaine de caractère;
      • XPathConstants.NUMBER: La méthode retournera un nombre;
      • XPathConstants.BOOLEAN: La méthode retournera un booléen;
      • XPathConstants.NODE: La méthode retournera un élément;
      • XPathConstants.NODESET: La méthode retournera une liste d'éléments;

Retourner un élément simple

L'exemple ci-dessous montre comment récupérer la valeur de l'élément « titre » qui possède la valeur « fr » pour l'attribut « lang »:

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.xml.sax.SAXException;

import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

public class MaClasse {
   public static void main(String[] args) {
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder;
      try{
         builder = factory.newDocumentBuilder();
         Document xml = builder.parse("tutorielsenfolie.xml");
      
      
         XPathFactory xPathFactory = XPathFactory.newInstance();
         XPath xPath = xPathFactory.newXPath();
         XPathExpression expr = xPath.compile("//titre[@lang='fr']");
         String titre = (String) expr.evaluate(xml, XPathConstants.STRING);
         System.out.println(titre);
      }catch(XPathExpressionException e){
         e.printStackTrace();
      }catch (ParserConfigurationException e) {
         // factory.newDocumentBuilder()
         e.printStackTrace();
      } catch (SAXException e) {
         // builder.parse
         e.printStackTrace();
      } catch (IOException e) {
         // builder.parse
         e.printStackTrace();
      }
   }
}

Retourner une liste d'élément

L'exemple ci-dessous montre comment récupérer la valeur de tous les éléments « titre »:

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import javax.xml.xpath.*;

public class MaClasse {
   public static void main(String[] args) {
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder;
      try{
         builder = factory.newDocumentBuilder();
         Document xml = builder.parse("tutorielsenfolie.xml");
      
         XPathFactory xPathFactory = XPathFactory.newInstance();
         XPath xPath = xPathFactory.newXPath();
         XPathExpression expr = xPath.compile("//tutoriel");
         NodeList listTutoriels = (NodeList) expr.evaluate(xml, XPathConstants.NODESET);
         
         for (int i = 0; i < listTutoriels.getLength(); i++) {
            Node titre = listTutoriels.item(i).getChildNodes().item(0);
            String texte = titre.getChildNodes().item(0).getNodeValue();
            System.out.println(texte);
         }
      }catch(Exception e){
         e.printStackTrace();
      }
   }
}

Récupérer la valeur d'un attribut

L'exemple ci-dessous montre comment récupérer la valeur de l'attribut « lang » de tous les éléments « titre »:

import java.io.IOException;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.xml.xpath.*;

public class MaClasse {
   public static void main(String[] args) {

      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder;
      try{
         builder = factory.newDocumentBuilder();
         Document xml = builder.parse("tutorielsenfolie.xml");
      
         XPathFactory xPathFactory = XPathFactory.newInstance();
         XPath xPath = xPathFactory.newXPath();
         XPathExpression expr = xPath.compile("//tutoriel");
         NodeList listTutoriels = (NodeList) expr.evaluate(xml, XPathConstants.NODESET);
         
         for (int i = 0; i < listTutoriels.getLength(); i++) {
            Node titre = listTutoriels.item(i).getChildNodes().item(0);
            String lang = titre.getAttributes().item(0).getNodeValue();
            System.out.println(lang);
         }
      }catch(Exception e){
         e.printStackTrace();
      }
   }
}

Tu as aimé ce tutoriel ?
Aide nous à améliorer le site ! Deviens partenaire officiel ou suis nous sur facebook !

Commentaires[0]

Tu as aimé ce tutoriel ? Alors partage-le avec tes amis !
Partager sur Facebook Partager sur Twitter Partager sur Myspace Partager sur Stumbleupon Soumettre sur Reddit Partager sur Digg Ajouter à vos favoris Technorati Ajouter à vos favoris Live Ajouter à vos favoris Google Ajouter sur vos favoris Yahoo Voir le flux rss

Mots Clés: Eclipse Java Netbeans parser un xml Programmation XML xpath XPathFactory

Veve :
(11/04/2013 - 17:19:44)
il faut juste mettre "sudo" à la place de "su" pour exécuter la commande en root

Veve :
(11/04/2013 - 17:18:56)
Salut tu peux aller lire ce tutoriel: http://www.tutorielsenfolie.com/tutoriels-63-installation-configuration-opennebula.html Il fonctionne aussi sous ubuntu

safa.souissi4 :
(10/04/2013 - 20:58:13)
s'il vous plait c urgent :(

safa.souissi4 :
(10/04/2013 - 20:56:25)
bonsoir,je cherche un tutos pour installer opennebula.org sous ubuntu 12.

Veve :
(18/03/2013 - 20:07:49)
oui, j'essaye de voir d'ou viens le problème.

sonde :
(18/03/2013 - 13:29:57)
re merci (j apprend un peu plus) je crois que j ai trouver pourquoi je peu pas poster si il y a ligne code impossible de poster lol

Veve :
(17/03/2013 - 21:34:49)
Salut, j'espère que ça t'a aidé.

sonde :
(17/03/2013 - 09:59:02)
pour ton aide

sonde :
(17/03/2013 - 09:57:36)
slt Veve impossible de laisser com

sonde :
(17/03/2013 - 09:56:55)
??

Demi-dieu :
(15/03/2013 - 18:41:13)
salut ^^

sonde :
(13/03/2013 - 14:49:35)
un petit coucou

Tanamoureuse :
(29/09/2011 - 06:11:08)
Je t'aime

Faire un don

Ma Publicité ici


Faire un don