IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Parser un fichier xml avec Java [JDOM]


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Parser un fichier xml avec Java
    Bonjour tout le monde,

    Je suis nouveau sur le forum et débutant dans la programmation java /J2EE. mon problème c'est que je n'arrive pas à lire le contenu d'un fichier xml dans premier temp et le modifier dans un deuxième temps avec l'API JDOM.

    voici un extrait du fichier que voudrais parcourir:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- Created by JWS2SBML on 2008/05/26 09:12:19-->
    <sbml xmlns="http://www.sbml.org/sbml/level2" level="2" version="1">
     <model name="curien">
      <listOfCompartments>
        <compartment id="compartment" name="compartment" size="1"/>
      </listOfCompartments>
      <listOfSpecies>
        <species id="Hser" name="Hser" compartment="compartment" initialConcentration="0" boundaryCondition="true" constant="true"/>
        <species id="Phser" name="Phser" compartment="compartment" initialConcentration="0"/>
        <species id="Cys" name="Cys" compartment="compartment" initialConcentration="15" boundaryCondition="true" constant="true"/>
        <species id="Cystathionine" name="Cystathionine" compartment="compartment" initialConcentration="0" boundaryCondition="true" constant="true"/>
        <species id="Phi" name="Phi" compartment="compartment" initialConcentration="10000" boundaryCondition="true" constant="true"/>
        <species id="Thr" name="Thr" compartment="compartment" initialConcentration="0" boundaryCondition="true" constant="true"/>
      </listOfSpecies>
      <listOfParameters>
        <parameter id="V1" name="V1" value="1"/>
        <parameter id="kcat2" name="kcat2" value="30"/>
        <parameter id="KmCYS" name="KmCYS" value="460"/>
        <parameter id="KmPHSER" name="KmPHSER" value="2500"/>
        <parameter id="Ki2" name="Ki2" value="2000"/>
        <parameter id="Ki3" name="Ki3" value="1000"/>
        <parameter id="CGS" name="CGS" value="0.7"/>
        <parameter id="TS" name="TS" value="5"/>
        <parameter id="AdoMet" name="AdoMet" value="20"/>
      </listOfParameters>
    </model>
    </sbml>

    et voici le code que j'utilise :

    SAXBuilder saxBuilder = new SAXBuilder();//construire un Objet SAXBuilder

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      Document doc = saxBuilder.build(new File(browsejTxtFld.getText()));
                    System.out.println("path = " + browsejTxtFld.getText());
     
                    Element sbml = doc.getRootElement();
                    Element model = sbml.getChild("model");
                    List species = model.getChildren("listOfSpecies");
                    Iterator sepciesIt = species.iterator();
     
                    while(sepciesIt.hasNext())
                    {
                       Element spece = (Element)sepciesIt.next();
                       System.out.println(spece.getChild("species").getValue());
     
                    }


    Merci de toute vos réponse

  2. #2
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut
    Bonjour et welcom ^^
    Deux trois choses pour que l'on puisse t'aider :
    Penser à utiliser les balise [code] pour que ton code soit lisible.
    Et précise nous exactement ton problème, car "je n'y arrive pas" ne nous aide pas vraiment. Ca plante, les résultats ne sont pas ceux escompté ou autre ?

  3. #3
    Membre du Club Avatar de blackhock
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 75
    Points : 41
    Points
    41
    Par défaut
    Salut selyousfi,
    Moi pour lire mes fichier XML j'ai utilisé un code avec DocumentBuilderFactory ui ressemble a, c'est d'ailleurs un membre de du forum qui m'a aidé avec ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    import org.w3c.dom.*;
    import javax.xml.parsers.*;
     
    public class ReadXml {
    	public static void main(String[] args) {
     
    		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    		DocumentBuilder builder = null;
    		Document doc = null;
    		Element racine = null;
    		NodeList nodeList = null;
    		try {
    			builder = factory.newDocumentBuilder();
    			doc = builder.parse("fichier.xml");
    			racine = doc.getDocumentElement();
    			nodeList = racine.getElementsByTagName("file");
    			for (int i = 0; i < nodeList.getLength(); i++) {
    				Element e = (Element)nodeList.item(i);
    				System.out.println(e.getAttribute("Name"));
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    Sachant le fichier XML est du genre: <file Name="NomDeFichier"></file> pour te préciser c'est quoi file et Name
    Après pour modifier le contenu de ton fichier XML... je ne sais pas trop comment faire.

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci blackhock pour ta réponse,
    Toi tu parcours ton fichier en utilisant le Parser Dom, alors que moi je voudrais utiliser Parser JDOM. Certe Jdom est à peu près la même chose sauf il utilise plus de featurs que DOM.

    Si quelqu'un pourrait me corrigé svp.

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    Bonjour,

    Il faut utiliser le name space dans ton code comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    
      public void testJDom() {
    
        Document document = null;
        Namespace nameSpace = Namespace.getNamespace("xsi", "http://www.sbml.org/sbml/level2");
    
        SAXBuilder builder = new SAXBuilder();
        try {
          document = builder.build("fichier.xml");
    
          Element sbml = document.getRootElement();
          Element model = sbml.getChild("model", nameSpace);
          List species = model.getChildren("listOfSpecies", nameSpace);
    
          for (Object o : species) {
            List speciesList = ((Element)o).getChildren();
            // Liste species
            for (Object sp : speciesList) {
              List attributeList = ((Element)sp).getAttributes();
              for (Object attr : attributeList) {
                System.out.println(((Attribute)attr).getName() + " = " + ((Attribute)attr).getValue());
              }
              System.out.println();
            }
          }
        }
        catch(JDOMException e) {
          System.err.println(e.getMessage());
        }
        catch(IOException e) {
          System.err.println(e.getMessage());
        }
      }
    
    Ce programme dépendra de ta structure du fichier xml.

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    J'ai résolu finalement mon problème, je vous fait part de mon code. :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    public class Main {
      public static void main(String[] args) {
            try {
                //Lecture du fichier
                SAXBuilder parser = new SAXBuilder();
                Document doc = parser.build("test.xml");
     
                Element root = doc.getRootElement();// Retourn l'élément Root du document (Sbml dans notre exemple)
                //System.out.println("Root element : " + root);
     
                //Traitement du fichier
                List listOfModels = root.getChildren(); //Return la liste des modèles (1 seul model dans notre cas: model)
                //System.out.println("List of children of Root element : " + listOfModels);
     
                Iterator listOfModelsIt = listOfModels.iterator();// on définit un itérateur sur cette liste de modèles
     
                while( listOfModelsIt.hasNext())
                {
                    Element currentModel = (Element) listOfModelsIt.next();
                    List dataModel = currentModel.getChildren();// on appele les diffrents enfants du model courant dataModel
     
                    //Traitement compatments
                    //System.out.println("-- List Of Compartment --\n");
                    Element listOfCompartments = (Element) dataModel.get(0);
                    List listOflistOfCompartments = listOfCompartments.getChildren();
                    Iterator listOflistOfCompartmentsIt = listOflistOfCompartments.iterator();
                    while(listOflistOfCompartmentsIt.hasNext())
                    {
                        Element currentCompartment = (Element) listOflistOfCompartmentsIt.next();
                        currentCompartment.setAttribute("id", "compartment");
                        currentCompartment.setAttribute("name", "compartment");
                        //System.out.println(currentCompartment.getAttribute("name").getValue());
                    }
    Merci poiur votre participation
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Java et XML : Traitement d'un fichier XML avec JAVA
    Par nice dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 18/05/2006, 21h24
  2. [XML] [EXPAT] Parser un fichier xml avec php
    Par Dargos dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 05/04/2006, 12h25
  3. [XML] Comment parser ce fichier XML avec java !
    Par jlassira dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 13/03/2006, 12h56
  4. problème pour parser un fichier xml avec XML::Simple
    Par black_code dans le forum Modules
    Réponses: 3
    Dernier message: 30/01/2006, 19h32
  5. [SAX] parser un fichier xml en Java
    Par royou dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 10/02/2005, 17h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo