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 :

String To XML [DOM]


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 String To XML
    Bonjour,
    comment je peu transformer une chaine de caractère XML vers un fichier XML
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String xml ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><personnes><etudiant classe=\"P2\"><nom>Josef</nom><prenom>Nicolas</prenom></etudiant></personnes>" ;

    et je veux comme résultat un fichier XML contenant cette chaine.

    je sais comment convertir un fichier Xml en string mais le contraire non.

    Merci

  2. #2
    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
    Hello,
    Document Xml -> File, ou même n'importe quel "Writer" en fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    String filename = ...;
    Document document = ...;
    DOMSource domSource = new DOMSource(document);
    FileWriter writer = new FileWriter(filename);
    StreamResult result = new StreamResult(writer);
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer transformer = tf.newTransformer();
    transformer.transform(domSource, result);
    writer.close();
    Si tu ne manipule pas d'instance de Document (XML) alors utilise directement la méthode write() du FileWriter.

  3. #3
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    String xml ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><personnes><etudiant classe=\"P2\"><nom>Josef</nom><prenom>Nicolas</prenom></etudiant></personnes>" ;
    		String filename = "Fichier.xml";
    		org.w3c.dom.Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xml);
    		DOMSource domSource = new DOMSource(document);
    		FileWriter writer = new FileWriter(filename);
    		StreamResult result = new StreamResult(writer);
    		TransformerFactory tf = TransformerFactory.newInstance();
    		Transformer transformer = tf.newTransformer();
    		transformer.transform(domSource, result);
    		writer.close();
    ça devrait marcher non ?

  4. #4
    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
    Non, car la méthode parse(String ) s'attend à avoir un chemin vers un fichier
    (cf http://java.sun.com/j2se/1.4.2/docs/...ntBuilder.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)
    Mais dans d'après ton code, autant écrire la String vers le fichier à moins que tu cherche à vérifier la validité du xml.

  5. #5
    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
    d'après ce que vous m'avez donné j'ai compris que la méthode parse de " DocumentBuilder " attend une source d'entré sois InputStreams, Files, URLs ...
    je ne cherche pas a vérifier la validité de XML je cherche seulement a convertir ma chaine en un fichier xml.

    voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    org.w3c.dom.Document document;
    		String xml ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><personnes><etudiant classe=\"P2\"><nom>Josef</nom><prenom>Nicolas</prenom></etudiant></personnes>" ;
    		String filename = "Fichier.xml";
     
    		InputSource s = new InputSource(new StringReader(xml)); 
    		document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(s);
    		DOMSource domSource = new DOMSource();
    		FileWriter writer = new FileWriter(filename);
    		StreamResult result = new StreamResult(writer);
    		TransformerFactory tf = TransformerFactory.newInstance();
    		Transformer transformer = tf.newTransformer();
    		transformer.transform(domSource, result);
    		writer.close();
    le résultat est un fichier XML mais son contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    c'est pas ma chaine

    Merci Morbo pour ton aide

  6. #6
    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
    Un fichier xml, n'est qu'un fichier text qui contient une chaine de caractère répondant au norme xml.
    Si tu es sûr de ta chaine, pas besoin de passer par un parseur qui instancie un arbre d'objet pour rien. Il te suffit d'écrire cette String sur le system de fichier à l'aide de FileWriter.write(String s) .

    Sinon même si on fait actuellement une opération inutile, elle devrait fonctionner quand même. Il n'y a pas d'exception levée qui interromp le traitement?
    Le seul truc que je vois pour le moment :
    J'enlèverais la déclaration de l'xml de la String :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String xml ="<personnes><etudiant classe=\"P2\"><nom>Josef</nom><prenom>Nicolas</prenom></etudiant></personnes>" ;
    Je crois que Java utilise l'UTF-16 et comme de toute façon le StringReader le sait, il vaut mieux éviter de spécifier qqchose pouvant être faux.

  7. #7
    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
    Marbo merci infiniment pour ton aide .
    j'ai trouvez une solution très basic , la voila pour les futures qui vont chercher ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FileWriter writer = new  FileWriter("monBeauFichier.xml" );
     writer.write(xml);
     writer.flush();
     writer.close();
    Merci encore Marbo

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Oui, enfin, "pour les futurs qui vont chercher", tout cela n'a rien à voir avec XML -_-°.

    Tu as une String que tu veux enregistrer dans un fichier texte, et à présent tu sais comment faire.

    Ceci étant dit, au lieu de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileWriter writer = new  FileWriter("monBeauFichier.xml");
    Je recommande de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Writer writer = new  OutputStreamWriter(new FileOutputStream("monBeauFichier.xml"), "utf-8");
    Cela permet de s'assurer que le fichier est enregistré en utf-8, ce qui est indispensable quand on fait du XML sans prologue.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    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 Morbo Voir le message
    Sinon même si on fait actuellement une opération inutile, elle devrait fonctionner quand même. Il n'y a pas d'exception levée qui interromp le traitement?
    Le seul truc que je vois pour le moment :
    J'enlèverais la déclaration de l'xml de la String :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String xml ="<personnes><etudiant classe=\"P2\"><nom>Josef</nom><prenom>Nicolas</prenom></etudiant></personnes>" ;
    Non il n'y a pas d'exception.il n'affiche rien et il crée un fichier qui contient un code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    alors que c'est pas ma chaine, meme si j'enlève la declaration de XML dans la String c'est la meme chose.

    et pour thelvin meme 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
    org.w3c.dom.Document document;
    		String xml ="<personnes><etudiant classe=\"P2\"><nom>Josef</nom><prenom>Nicolas</prenom></etudiant></personnes>" ;
    		 String filename = "Fichier.xml";
    		InputSource s = new InputSource(new StringReader(xml)); 
    		document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(s);
    		DOMSource domSource = new DOMSource();
     
    		Writer writer = new  OutputStreamWriter(new FileOutputStream("monBeauFichier.xml"), "utf-8");		
    		StreamResult result = new StreamResult(writer);
    		TransformerFactory tf = TransformerFactory.newInstance();
    		Transformer transformer = tf.newTransformer();
    		transformer.transform(domSource, result);
    		writer.close();
    il m'affiche aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par mimish Voir le message
    et pour thelvin meme 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
    org.w3c.dom.Document document;
    		String xml ="<personnes><etudiant classe=\"P2\"><nom>Josef</nom><prenom>Nicolas</prenom></etudiant></personnes>" ;
    		 String filename = "Fichier.xml";
    		InputSource s = new InputSource(new StringReader(xml)); 
    		document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(s);
    		DOMSource domSource = new DOMSource();
     
    		Writer writer = new  OutputStreamWriter(new FileOutputStream("monBeauFichier.xml"), "utf-8");		
    		StreamResult result = new StreamResult(writer);
    		TransformerFactory tf = TransformerFactory.newInstance();
    		Transformer transformer = tf.newTransformer();
    		transformer.transform(domSource, result);
    		writer.close();
    il m'affiche aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    Avec ce code, oui. Avec le code que tu avais montré à la fin, non.
    Pourquoi diable utilises-tu un Transformer ? C'est pour vérifier que la chaîne que tu as est du XML bien formé ? Cela est déjà vérifié au moment de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(s);
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    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 thelvin Voir le message
    Avec ce code, oui. Avec le code que tu avais montré à la fin, non.
    si je te dis qu'il m'affiche pas ma chaine c'est parce que je l'ai essayé

  12. #12
    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
    voici l'erreur , il fallait faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DOMSource domSource = new DOMSource(document);
    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DOMSource domSource = new DOMSource();
    Merci

  13. #13
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Je sais pas pour les autres mais moi tu m'as largué.
    En recommençant du début : qu'est-ce que tu essayais de faire ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Parser une chaine String en XML
    Par robocop2776 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 01/05/2011, 17h59
  2. [C# 2.0] Convertir un string en XML
    Par mioux dans le forum C#
    Réponses: 7
    Dernier message: 02/10/2007, 16h21
  3. Convertir string en XML
    Par matthew016 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 17/07/2007, 00h27
  4. encodage d'une string en XML
    Par maxvador dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 24/08/2006, 17h57
  5. String -> Document XML
    Par 205 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 17/05/2006, 17h08

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