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 :

Lire une chaine XML


Sujet :

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

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 158
    Par défaut Lire une chaine XML
    Bonsoir tous le monde,
    je veux savoir est ce qu'il y a un moyen de lire une chaine de caractère XML sans passé par un fichier.
    sa veux dire sans écrire cette chaine dans un fichier et puis la lire.
    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maChaine=<?xml version="1.0" encoding="UTF-8"?><Choix><personne><nom>MonNom</nom><Prenom>MonPrenom</Prenom></personne></Choix>

    merci

  2. #2
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut
    Salut,

    est ce qu'il y a un moyen de lire une chaine de caractère XML sans passé par un fichier.


    La lire ?

    si tu fait un System.out.print(maChaine) tu devrais pouvoir la lire mais avant assure toi de la convertir en String parce qu'avec les """" tu ne vas pas t'en sortir.

    Il faudrait que tu fasse une fonction de conversion qui met des / avant les ".

    J'espère avoir été clair .

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    (cf http://java.sun.com/j2se/1.4.2/docs/...erFactory.html )

    Si tu tiens à parser ta chaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    InputSource s = new InputSource(new StringReader(myString))); 
    document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(s);

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 158
    Par défaut
    Citation Envoyé par mouss4rs Voir le message
    La lire ?
    si tu fait un System.out.print(maChaine) tu devrais pouvoir la lire mais avant assure toi de la convertir en String parce qu'avec les """" tu ne vas pas t'en sortir.
    .
    mouss4rs peut que c'est moi qui n'étais pas claire.
    "Lire" c'est pas l'afficher mais récupéré les valeurs qui sont dans la chaine XML .

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maChaine=<?xml version="1.0" encoding="UTF-8"?><Choix><personne><nom>MonNom</nom><Prenom>MonPrenom</Prenom></personne></Choix>
    j'aurai genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String  nom = MonNom;
    String  prenom = MonPrenom;

    @Marbo :
    j'ai pas compris comment récupéré les valeurs a partir de "document "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    String maChaine="<?xml version=\"1.0\" encoding=\"UTF-8\"?><Choix><personne>"+
    		"<nom>MonNom</nom><Prenom>MonPrenom</Prenom></personne></Choix>";
    		InputSource s = new InputSource(new StringReader(maChaine)); 
    		Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(s);

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 158
    Par défaut
    merci Morbo pour le lien que vous m'avez donner et j'ai déjà lu
    seulement, dans la partie Comment parcourir l'arborescence d'un DOM
    n'explique pas bien pour quelqu'un qui n'est pas professionnel en XML .
    pourriez-vous être plus précis ?

    j'ai essayé ce bout de code , il ma l'air simple mais quand même ne marche pas :
    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
    String maChaine="<?xml version=\"1.0\" encoding=\"UTF-8\"?><Choix><personne>"+
    		"<nom>MonNom</nom><Prenom>MonPrenom</Prenom></personne></Choix>";
     
    		InputSource s = new InputSource(new StringReader(maChaine)); 
     
    		Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(s);		
    		Element racine = (Element) document.getDocumentElement();
     
    		List Perso = racine.getChildren("personne");
     
    		//On crée un Iterator sur notre liste
    		Iterator i = Perso.iterator();
     
    		Element courantI = (Element)i.next();
     
    		//On affiche le nom de l'element courant
    		String name = (courantI.getChild("nom").getText());
     
    		System.out.println(name);

    ERREUR:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Exception in thread "main" java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.DeferredElementImpl cannot be cast to org.jdom.Element
    	at Lire_XML.main(Lire_XML.java:41)
    la ligne 41 correspond à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		Element racine = (Element) document.getDocumentElement();

  7. #7
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    D'après le message d'erreur le problème viens du cast en Element
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Element racine = (Element) document.getDocumentElement();
    La trace indique que tu veux caster en org.jdom.Element or la méthode document.getDocumentElement() renvoie un org.w3c.dom.Element. Je pense que tu as le mauvais Element dans tes imports.
    Regarde dans tes imports du devrais avoir l'import suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import org.jdom.Element;
    remplace le par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import org.w3c.dom.Element;
    Le cast n'est alors plus nécessaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Element racine = document.getDocumentElement();
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 158
    Par défaut
    Citation Envoyé par le y@m's Voir le message
    Regarde dans tes imports du devrais avoir l'import suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import org.jdom.Element;
    remplace le par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import org.w3c.dom.Element;
    quand j'ajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import org.w3c.dom.Element;
    il m'affiche des erreurs sur les getChildren

    voici mon code en complet

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    import org.jdom.*;
    import org.jdom.input.*;
    import org.jdom.filter.*;
    import org.xml.sax.InputSource;
    import org.xml.sax.SAXException;
     
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.StringReader;
    import java.util.List;
    import java.util.Iterator;
     
    import org.w3c.dom.Element;
     
     
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
     
    public class Lire_XML
    {
     
    	static Element racine;
     
    	public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException
    	{
    		//On crée une instance de SAXBuilder
    		SAXBuilder sxb = new SAXBuilder();
    		String StringXML = chaineXML();
    		InputSource s = new InputSource(new StringReader(StringXML)); 
     
    		org.w3c.dom.Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(s);		
     
     
    		racine = document.getDocumentElement();
     
    		List listEtudiants = racine.getChildren("personne");
     
    		Iterator i = listEtudiants.iterator();
    		while(i.hasNext())
    		{
    			Element courant = (Element)i.next();
    			System.out.println(courant.getChild("nom").getText());
    			System.out.println(courant.getChild("Prenom").getText());	
    		}
    	}
     
    	public static String chaineXML()
    	{
    		String maChaine="<?xml version=\"1.0\" encoding=\"UTF-8\"?><Choix><personne>"+
    		"<nom>MonNom</nom><Prenom>MonPrenom</Prenom></personne></Choix>";
     
     
    		return maChaine;
    	}
    }

  9. #9
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Parce que la classe org.w3c.dom.Element ne possède pas de méthode getChildren(). Regarde le lien vers la FAQ qui t'a été donné.
    Le problème est que tu mélanges jdom avec l'implémentation dom du jdk. Alors à moins que tu en aies un besoin particulier, je pense que tu peux lever tous tes import jdom. De même pourquoi instancies tu un SAXBuilder alors que tu utilises DOM ?
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 158
    Par défaut
    l'instruction de SAXBuilder est une instruction d'un ancien programme désolé.
    la classe org.w3c.dom.Element ne possède pas de getChildren() , alors comment faire pour récupérer les valeurs entre les balises ?
    je ne suis pas un spécialiste en XML et c'est pas ma spécialité .

  11. #11
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Tout est indiqué dans les liens qui t'ont été donnés, les as tu lu ?
    http://java.developpez.com/faq/xml/?page=dom
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  12. #12
    Membre chevronné
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Par défaut
    Il y a une chose que je ne comprends pas: pourquoi utiliser jdom et w3c (Element) en meme temps?

    Pour avoir lire une string xml et transformer en Document JDOM tu peux faire avec ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public final static Document parse(String xml) throws ParserConfigurationException, SAXException, IOException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        return builder.parse(new InputSource(new StringReader(xml)));
    }

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/09/2006, 08h33
  2. Réponses: 4
    Dernier message: 11/05/2006, 14h41
  3. [VB.NET] Charger une chaine XML
    Par Dnx dans le forum ASP.NET
    Réponses: 11
    Dernier message: 17/03/2005, 14h55
  4. [VB.NET] Alimenter un dataset avec une chaine XML...
    Par David.V dans le forum ASP.NET
    Réponses: 3
    Dernier message: 25/05/2004, 09h09
  5. Lire Une Chaine De Caractères
    Par Jonathan_Korvitch dans le forum C
    Réponses: 12
    Dernier message: 07/01/2003, 05h37

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