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 :

Specifier l'encoding d'un fichier XML en java [DOM]


Sujet :

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

  1. #1
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Points : 231
    Points
    231
    Par défaut Specifier l'encoding d'un fichier XML en java
    hello,

    coment puis-je faire :

    <?xml version="1.0" encoding="iso-8859-1"?>
    en code java


    Merci beaucoup

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 43
    Points : 56
    Points
    56
    Par défaut
    Voici en jdom

    avec la ligne importante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    iso.setEncoding("iso-8859-1");
    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
     
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.io.Writer;
     
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.output.Format;
    import org.jdom.output.XMLOutputter;
     
    public class TestXmlOutput {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		Element root = new Element("testDoc");
    		Document myDocument = new Document(root);
    		Element testDoc = new Element("testDoc");
    		root.addContent(testDoc);
    		Format iso;
    	    XMLOutputter outputer = new XMLOutputter();
    	    iso = outputer.getFormat();
    	    iso.setEncoding("iso-8859-1");
    	    outputer.setFormat(iso);
    	    File file = null;
    		file = new File("d:/testDoc.xml");
    	    try {
    	        FileOutputStream fos = new FileOutputStream(file);
    	        Writer writter = new OutputStreamWriter(fos, "iso-8859-1");
    	        outputer.output(myDocument, writter);
    	        writter.flush();
    	        writter.close();
    	    } catch (IOException e) {
    	        e.printStackTrace();
     
    	}
    	}
    }

  3. #3
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Points : 231
    Points
    231
    Par défaut
    Merci bq pour ta réponse,

    Malheureusement j'utilise pas JDOM, je vous explique ce que je voudrais faire peut etre pourriez vous m'aider.

    Le but c'est de convertir un objet en une balise XML, cet object se compose simplement de trois champs string, à la fin le résultat doit ressembler à la balise suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <fund description="machin" id="fund 1" label="FUND 1"/>
    Par contre j'ai problème qui survient quand les champs string contiennent des caractères accentués. C'est pour cela que je voulais indiquer l'encoding pour ainsi reconnaitre c'est caractères.

    Voila la méthode "simplifié" que j'utilise pour mettre à jour la balise XML

    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
     
    import org.apache.xerces.parsers.DOMParser;
    import org.w3c.dom.Attr;
    import org.w3c.dom.Document;
    ...
     
    private String updateFundToData(String id, String label, String description, String adata)
       {
     
    	Document doc = initXmlDoc(adata);
    	if(doc == null)
    	{
    	   	return adata;
    	}
     
    	Node tmpNodeFund = null;
    	String idfund;
    	for (int i = 0; i < doc.getElementsByTagName("fund").getLength(); i++) 
    	 {
    	   	tmpNodeFund=doc.getElementsByTagName("fund").item(i);
     
    	   	if(tmpNodeFund.getAttributes().getNamedItem("id")!=null)
    	   	{
    	   			idfund=tmpNodeFund.getAttributes().getNamedItem("id").getNodeValue();
    	   	}
    	   	else{
    	   		idfund="";
    	   	}
    	   	if(idfund.equals(id))
    	   	{
    	   			if(tmpNodeFund.getAttributes().getNamedItem("id")!=null)
    	   	     {
    	   				tmpNodeFund.getAttributes().getNamedItem("id").setNodeValue(id);
    	       	}
    	   			if(tmpNodeFund.getAttributes().getNamedItem("label")!=null)
    	   			{
    	   				tmpNodeFund.getAttributes().getNamedItem("label").setNodeValue(label);
    	       		}
    	   			if(tmpNodeFund.getAttributes().getNamedItem("description")!=null)
    	   			{
    	   				tmpNodeFund.getAttributes().getNamedItem("description").setNodeValue(description);
    	       		}
    	   			else // Si la description n'existe pas dans la balise fund, on l'ajoute
    	   			{
     
    	   				Attr attributeDescription=doc.createAttribute("description");
    	   				attributeDescription.setValue(description);
    	   				tmpNodeFund.getAttributes().setNamedItem(attributeDescription);
    	   			}
     
    	   		}
    	   	}
    	   	return adata;
       }
    le problème survient quand je passe la valeur du parametre à la valeur du nœud, par ex :
    tmpNodeFund.getAttributes().getNamedItem("label").setNodeValue(label);
    à quel niveau a ton avis je dois mettre l'encoding et surtout dans qu'elle objet dispose t on d'une méthode qui me permet de le faire. (Document ? je vois pas qu'elle méthode je dois utiliser)

    Merci beaucoup

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 43
    Points : 56
    Points
    56
    Par défaut
    j ai deja eu ce genre de probléme d'encoding ce que l on ma répondu à l'époque c est que

    Une fois en Java on n'a pas à se soucier de l'encodage (c'est toujours de l'Utf-16). Ce n'est que lors des entrées/sorties qu'on doit gérer cela...
    donc en théorie quand tu fait ton setNodeValue(label) label devrait être formater en utf16 => pas de probléme ....

    Comment fait tu pour voir le résultat de ton XML (ecriture en file, sysout consol, ...) ?

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 210
    Points : 459
    Points
    459
    Par défaut
    Hello,

    Je te conseille plutot d'utiliser l'api StAX pour écrire ce genre de petite application. L'écriture du XML est bien + intuitif que lorsqu'on utilise DOM.
    Petite précision, je te conseille d'avoir la librairie woodstox dans ton projet, qui est une bonne implémentation de stax.

    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
     
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance();
    XMLStreamWriter out = xmlOutputFactory.createXMLStreamWriter(baos, "iso-8859-1");
     
    out.writeStartDocument();
    out.writeStartElement("fund");
    out.writeAttribute("description", "machin");
    out.writeAttribute("id", "fund 1");
    out.writeAttribute("label", "FUND 1");
    out.writeEndElement();
    out.writeEndDocument();
    out.close();
     
    System.out.println(baos.toString("iso-8859-1"));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?xml version='1.0' encoding='iso-8859-1'?><fund description="machin" id="fund 1" label="FUND 1" />

  6. #6
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Points : 231
    Points
    231
    Par défaut
    Merci pour vos réponses, j'avais déjà résolu le problème mais j'ai oublié de le préciser. J'ai juste empêcher le user d'entrer des caractères accentues. Je vais changer pour prendre en compte vos solutions

    merci encore

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

Discussions similaires

  1. Changer l'encoding d'un fichier XML
    Par zerkos dans le forum Android
    Réponses: 21
    Dernier message: 22/01/2013, 13h58
  2. [XML]Encoding d'un fichier XML
    Par virgul dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 13/06/2007, 16h45
  3. [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
  4. [DOM] Ecriture d'un fichier XML en java
    Par fidififouille dans le forum Format d'échange (XML, JSON...)
    Réponses: 11
    Dernier message: 12/05/2004, 09h32
  5. [DOM] est ce qu'on peut créer un fichier xml en java ?
    Par miloud dans le forum Format d'échange (XML, JSON...)
    Réponses: 9
    Dernier message: 21/01/2004, 10h40

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