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 :

Xml et java comment faire?


Sujet :

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

  1. #1
    Membre habitué
    Inscrit en
    Avril 2007
    Messages
    521
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 521
    Points : 167
    Points
    167
    Par défaut Xml et java comment faire?
    Bonjour j'ai une chaine de caractère dans laquelle je possède des données sous forme d'un xml 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
    <?xml version="1.0" encoding="utf-8"?>
    <StudyLevelResponse>
      <Study>
        <StudyInstanceUID>1.2.826.0.1.3680043.2.455.30.11.1271002.8.240372</StudyInstanceUID>
        <StudyID>1</StudyID>
        <PatientID>SIR234739</PatientID>
        <PatientName>RobertMAYER</PatientName>
        <StudyDate>2009-08-27</StudyDate>
        <StudyHour>09:35:05</StudyHour>
        <referringphysician>MAYERh07^Robert</referringphysician>
        <StudyDescription>Abdomen</StudyDescription>
        <requestingphysician>MAYERy4^Robert</requestingphysician>
        <sourceae>TEST</sourceae>
        <AccessionNumber>1</AccessionNumber>
      </Study>
      <Study>
        <StudyInstanceUID>1.2.826.0.1.3680043.2.455.30.11.1271002.8.240311</StudyInstanceUID>
        <StudyID>1</StudyID>
        <PatientID>SIR345161</PatientID>
        <PatientName>VictoireJEQUECE</PatientName>
        <StudyDate>2009-08-27</StudyDate>
        <StudyHour>11:02:10</StudyHour>
        <referringphysician>JEQUECEHvZ^Victoire</referringphysician>
        <StudyDescription>Abdomen</StudyDescription>
        <requestingphysician>VALENTE^Patrick^^^</requestingphysician>
        <sourceae>TEST</sourceae>
        <AccessionNumber>1</AccessionNumber>
      </Study>
    </StudyLevelResponse>
    comment à partir de cette chaine récupérer les valeur de chaque balise? j'ai cherché sans trop de succès pour l'instant

    Merci

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2009
    Messages : 112
    Points : 136
    Points
    136
    Par défaut
    Salut,

    A moins de ne pas avoir le choix, il existe des API gérant le xml qui devraient grandement te faciliter le travail

  3. #3
    Membre habitué
    Inscrit en
    Avril 2007
    Messages
    521
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 521
    Points : 167
    Points
    167
    Par défaut
    j'ai essayer de voir mais je n'en trouve pas qui prennent un String pour faire ce que je veux mais elles utilisent des fichiers xml or moi j'ai un String

  4. #4
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 133
    Points : 149
    Points
    149
    Par défaut
    Généralement, les API de parsing permettent de prendre en entrée un Reader. Si tu as un String, tu peux utiliser la classe StreamReader, qui étend Reader.

  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
    Avec jdom, ceci pourrait t'aider:

    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
    
        public static Document readFromString(String xmlString)
        {
            try
            {
                SAXBuilder builder = new SAXBuilder();
                return builder.build(new ByteArrayInputStream(xmlString.getBytes()));
            }
            catch(IOException e)
            {
    	   System.err.println("IOException readFromString: " + e.getMessage());
                return null;
            }
            catch (JDOMException e)
            {
    	   System.err.println("JDOMException readFromString: " + e.getMessage());
                return null;
            }
        }
    

  6. #6
    Membre habitué
    Inscrit en
    Avril 2007
    Messages
    521
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 521
    Points : 167
    Points
    167
    Par défaut
    en utilisant le code de ttttnht j'ai créé une methode d'affichage inspiré de ce tuto http://cynober.developpez.com/tutori...xml/jdom/#L3.2 et voici 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
     
    public void afficheALL(String xmlString)
    {
     
    document =readFromString( xmlString);
     
     //On crée une List contenant tous les noeuds "etudiant" de l'Element racine
     List listEtudiants = racine.getChildren("Study");
     
     //On crée un Iterator sur notre liste
     Iterator i = listEtudiants.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("PatientName").getText());
    	}
    }
    sauf que quand j'appelle la methode afficheAll(StringXmlApproprié) j'ai ce bloc d'erreurs
    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
     
    Exception in thread "AWT-EventQueue-0" java.lang.reflect.UndeclaredThrowableException
    	at $Proxy1.run(Unknown Source)
    	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.run(Unknown Source)
    Caused by: java.security.PrivilegedActionException: javax.script.ScriptException: sun.org.mozilla.javascript.internal.WrappedException: Wrapped java.lang.NullPointerException (<Unknown source>#23) in <Unknown source> at line number 23
    	at java.security.AccessController.doPrivileged(Native Method)
    	at com.sun.script.util.InterfaceImplementor$InterfaceImplementorInvocationHandler.invoke(Unknown Source)
    	... 9 more
    Caused by: javax.script.ScriptException: sun.org.mozilla.javascript.internal.WrappedException: Wrapped java.lang.NullPointerException (<Unknown source>#23) in <Unknown source> at line number 23
    	at com.sun.script.javascript.RhinoScriptEngine.invoke(Unknown Source)
    	at com.sun.script.javascript.RhinoScriptEngine.invokeMethod(Unknown Source)
    	at com.sun.script.util.InterfaceImplementor$InterfaceImplementorInvocationHandler$1.run(Unknown Source)
    	... 11 more

  7. #7
    Membre actif Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Points : 254
    Points
    254
    Par défaut
    Tu peux faire ca avec xstream assez facilement, il te faudra neanmoins declarer 2 class.

    Une class FichierXML:
    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.xml.sax.InputSource;
    import java.util.ArrayList;
     
    public class FichierXML extends Inputsource{
    private ArrayList<Study> studyLevelResponse=null; 
     
    /* Constructeurs */
    //necessaire pour faire tourner xstream
     public FichierXML (){
      super();//appel au constructeur de InputSource
     }
    //plus pratique dans ton cas
     public FichierXML (ArrayList<Study> studyLevelResponse){
      super();//appel au constructeur de InputSource
      this.studyLevelResponse=studyLevelResponse;
    }
     
    /* Getter & Setter */
    //sont necessaire à xstream
    public ArrayList<Study> getStudyLevelResponse(){
     return studyLevelResponse;
    }
    public void setStudyLevelResponse(ArrayList<Study> studyLevelResponse){
     this.studyLevelResponse=studyLevelResponse;
    }
    Une autre class Study:
    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
    35
     
    import org.xml.sax.InputSource;
     
    public class Study extends InputSource{
     private String studyInstanceUID=null;
     private String studyID=null;
     private String patientID=null;
     private String patientName=null;
     private String studyDate=null;
     private String studyHour=null;
     private String referringphysician=null;     
     private String studyDescription=null;
     private String requestingphysician=null;
     private String sourceae=null;
     private String accessionNumber=null;
     
     public Study(){
      super();
     }
     public Study(String studyID,String patientID,String patientName,String studyDate,String studyHour,String referringphysician,String studyDescription, String requestingphysician,String sourceae,String accessionNumber){
      super();
      this.studyID=studyID;
      this.patientID=patientID;
      this.patientName=patientName;
      this.studyDate=studyDate;
      this.studyHour=studyHour;
      this.referringphysician=referringphysician;     
      this.studyDescription=studyDescription;
      this.requestingphysician=requestingphysician;
      this.sourceae=sourceae;
      this.accessionNumber=accessionNumber;
    }
    //Getter & Setter
    //... je te laisse faire c'est pas compliquer et c'est long a ecrire sans IDE
    }
    Ensuite tu parse dans un fonction genre:
    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 com.thoughtworks.xstream.XStream;
    import com.thoughtworks.xstream.io.xml.DomDriver;
    ...
    public FichierXML lireFichierXml(String monFichierXml){
     File fichier=null;
     FileInputStream fis=null;
     FichierXML fichierXML=null;
     XStream xstream =null;
     fichier=new File(monFicherXml);
      if(!fichier.exists()){
       return null;
      }else{
       try {
        fis=new FileInputStream(fichier);
        xstream=new XStream(new DomDriver());
        studyLevelResponse=(FichierXML) xstream.fromXML(fis);
        fis.close();
      }catch (FileNotFoundException fnfe) {
       fnfe.printStackTrace();
      }catch (IOException ioe) {
       ioe.printStackTrace();
      }
     return fichierXML;
    }
    }
    La tu obtiens une instance de FichierXML qui contient tout ton fichier XML
    Bon y a peut etre des p'tite boulette mais en gros ca dois pas etre loin (chui en WK moi!!)
    Il te faut biensur telecharger le jar de xstream et le mettre dans le classpath de ton projet.
    Note: en relisant j'ai fais quelque p'tite correction.

Discussions similaires

  1. Imprimer en JAVA. Comment faire ?
    Par khaledzz9 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 05/07/2009, 10h33
  2. [DOM XML] Domdocument xml et tableau : comment faire un tri ?
    Par youtch dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 23/03/2009, 14h37
  3. [Java] comment faire les conditions ?
    Par tarekphp dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 22/08/2008, 09h39
  4. XML et MCD : Comment Faire ?
    Par soltani.slim dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 10/10/2005, 14h19
  5. [DOM] Comment créer des flux XML en java ?
    Par nean_j dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 27/04/2004, 12h00

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