XML lire balise pour obtenir la valeur

Résolu
SpaceHam Messages postés 78 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 22 octobre 2015 - 30 nov. 2010 à 17:40
SpaceHam Messages postés 78 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 22 octobre 2015 - 30 nov. 2010 à 20:49
Bonjour à vous tous,

J'ai fait mes propres classe pour lire des fichier xml afin de ressortir la ou les balises précises que je veux obtenir l'information. Le seul problème c'est que dans mon fichier xml je dois espacer mes valeurs ce qui n'est pas très standard.

Un fichier xml devrait être écris de la sorte :

personnes.xml
--------------

<nom>Smith</nom>
John





Ainsi je devrais pouvoir sortir les balise que je veux dans ce cas nom et prenom pour obtenir : Smith John


Dans mon fichier xml actuel afin que le tout fonctionne je dois espacé le tout afin d'en ressortir mes valeurs ce qui est très laid :


personnes.xml
--------------

<nom> Smith </nom>
John





je vais copier mes fichiers source pour vous montrer mes algos si quelqu'un aurait une idée afin de corriger ce problème ce serais apprécier.

SpaceHamAgent

7 réponses

SpaceHam Messages postés 78 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 22 octobre 2015
30 nov. 2010 à 20:49
Salut DarkSidious :),

J'ai refais une nouvelle classe grace a des exemple du net et j'ai ajouté le JDom.jar dans mon classpath. Si jamais d'autres personnes voudrait avoir accès à mon code eh bien c'est simplement que le tout retourne la valeur d'une balise précise.

exemple.xml
----------------------------------
<nomapplication>
<client>
<nom>Smith</nom>
John


</client>
<db>
192.168.1.201
8080


</db>
</nomapplication>
---------------------------------

Avec ma classe ici-bas je n'ai qu'à faire ceci pour en sortir la String de valeur demandé :


String valeur = XMLReader.readBalise("client", "prenom", "exemple.xml")

la valeur contiendra donc : John


Source de mon fichier classe XMLReader.java

--------------------------------------
package xmlr.utils;

import java.io.*;
import org.jdom.*;
import org.jdom.input.*;

import java.util.List;
import java.util.Iterator;

public class XMLReader
{
private static org.jdom.Document document;
private static Element racine;

public static String readBalise(String parent, String child, String path)
{
//On crée une instance de SAXBuilder
SAXBuilder sxb = new SAXBuilder();
try
{
//On crée un nouveau document JDOM avec en argument le fichier XML
//Le parsing est terminé ;)
document = sxb.build(new File(path));
}
catch(Exception e)
{

}

//On initialise un nouvel élément racine avec l'élément racine du document.
racine = document.getRootElement();

//Méthode définie dans la partie 3.2. de cet article
String balise = afficheALL(parent, child);

return balise;
}
private static String afficheALL(String parent, String child)
{
String balise = "no info";
//On crée une List contenant tous les noeuds "etudiant" de l'Element racine
List listBalise = racine.getChildren(parent);

//On crée un Iterator sur notre liste
Iterator i = listBalise.iterator();
while(i.hasNext())
{
//On recrée l'Element courant à chaque tour de boucle afin de
//pouvoir utiliser les méthodes propres aux Element comme :
//selectionner un noeud fils, modifier du texte, etc...
Element courant = (Element)i.next();
//On affiche le nom de l'element courant
System.out.println(courant.getChild(child).getText());
balise = courant.getChild(child).getText();
}
return balise;
}
}
--------------------------------------
SpaceHamAgent
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
30 nov. 2010 à 18:20
Salut,

Quel est l'intérêt de coder ce genre de chose alors qu'il existe déjà plusieurs bibliothèque qui font déjà cà très bien, et de façon optimisé : non seulement tu y gagne du temps en utilisant ces bibliothèques, mais en plus, ce sont des bibliothèques éprouvées qui ne comportent pas ou peu de bugs et qui peuvent être maintenues par d'autres personnes.

Tu peux par exemple voir du côté de JDom.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
SpaceHam Messages postés 78 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 22 octobre 2015
30 nov. 2010 à 18:50
il y a SAX et DOM oui j'ai regardé mais il me semble que je ne trouvais jamais le .jar afin de le rajouté dans mon buildpath d'Eclipse. A moins que tu puisses me faire un exemple simple avec DOM (Je crois que c'est lui le plus simple) Ce serais apprécié. et surtout ou trouver le bon package.


SpaceHamAgent
0
SpaceHam Messages postés 78 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 22 octobre 2015
30 nov. 2010 à 18:50
il y a SAX et DOM oui j'ai regardé mais il me semble que je ne trouvais jamais le .jar afin de le rajouté dans mon buildpath d'Eclipse. A moins que tu puisses me faire un exemple simple avec DOM (Je crois que c'est lui le plus simple) Ce serais apprécié. et surtout ou trouver le bon package.


SpaceHamAgent
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
30 nov. 2010 à 18:54
Salut,

Tu peux trouver le jar de JDom sur la page de téléchargement de la bibliothèque :
http://www.jdom.org/downloads/index.html

Ensuite pour l'ajout dans le classpath de ton application sous eclipse, ca se fait exactement de la même façon que pour tout autre jar : clic droit sur ton projet puis clic sur le menu "Build Path/Configure Build Path"

Pour ce qui est des exemples d'utilisation, il en existe plusieurs sur le net ou ici. Va voir ma source de parser de flux xml de météo par exemple (je me rappelle plus si j'utilise JDom dans ma source ou SAX).
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
SpaceHam Messages postés 78 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 22 octobre 2015
30 nov. 2010 à 19:14
Chose certaine j'en était sur que tu m'aurais parlé de Sax ou Dom... mais bon j'essaie juste de me replonger la dedans mais sans succès. Je cherche toujours ton exemple que tu me parle tout en cherchant sur le net d'autres exemples...

SpaceHamAgent
0
SpaceHam Messages postés 78 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 22 octobre 2015
30 nov. 2010 à 20:49
Salut DarkSidious :),

J'ai refais une nouvelle classe grace a des exemple du net et j'ai ajouté le JDom.jar dans mon classpath. Si jamais d'autres personnes voudrait avoir accès à mon code eh bien c'est simplement que le tout retourne la valeur d'une balise précise.

exemple.xml
----------------------------------
<nomapplication>
<client>
<nom>Smith</nom>
John


</client>
<db>
192.168.1.201
8080


</db>
</nomapplication>
---------------------------------

Avec ma classe ici-bas je n'ai qu'à faire ceci pour en sortir la String de valeur demandé :


String valeur = XMLReader.readBalise("client", "prenom", "exemple.xml")

la valeur contiendra donc : John


Source de mon fichier classe XMLReader.java

--------------------------------------
package xmlr.utils;

import java.io.*;
import org.jdom.*;
import org.jdom.input.*;

import java.util.List;
import java.util.Iterator;

public class XMLReader
{
private static org.jdom.Document document;
private static Element racine;

public static String readBalise(String parent, String child, String path)
{
//On crée une instance de SAXBuilder
SAXBuilder sxb = new SAXBuilder();
try
{
//On crée un nouveau document JDOM avec en argument le fichier XML
//Le parsing est terminé ;)
document = sxb.build(new File(path));
}
catch(Exception e)
{

}

//On initialise un nouvel élément racine avec l'élément racine du document.
racine = document.getRootElement();

//Méthode définie dans la partie 3.2. de cet article
String balise = afficheALL(parent, child);

return balise;
}
private static String afficheALL(String parent, String child)
{
String balise = "no info";
//On crée une List contenant tous les noeuds "etudiant" de l'Element racine
List listBalise = racine.getChildren(parent);

//On crée un Iterator sur notre liste
Iterator i = listBalise.iterator();
while(i.hasNext())
{
//On recrée l'Element courant à chaque tour de boucle afin de
//pouvoir utiliser les méthodes propres aux Element comme :
//selectionner un noeud fils, modifier du texte, etc...
Element courant = (Element)i.next();
//On affiche le nom de l'element courant
System.out.println(courant.getChild(child).getText());
balise = courant.getChild(child).getText();
}
return balise;
}
}
--------------------------------------
SpaceHamAgent
0