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 :

& et & [DOM]


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut & et &
    Bonjour,

    avec DOM, je doit créer un document XML dont certains éléments contiennent une esperluette &.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String elementCharText = "&#x" + Integer.toHexString(i) + ";";
    Le document DOM est écrit un fichier XML à l'aide la méthode suivante :
    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
      private void writeDOM2XmlFile(Document documentDOM, String filename) {
    	try {
    	    // Prepare the DOM document for writing
    	    Source source = new DOMSource(documentDOM);
     
    	    // Prepare the output file
    	    File file = new File(filename);
    	    Result result = new StreamResult(file.toURI().getPath());
     
    	    // Write the DOM document to the file
    	    Transformer transformer = TransformerFactory.newInstance().newTransformer();	    
    	    transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
    	    transformer.setOutputProperty(OutputKeys.STANDALONE, "yes");
    	    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
    	    transformer.setOutputProperty(OutputKeys.METHOD, "xml");                      
    	    transformer.transform(source, result);
    	} catch(TransformerConfigurationException e) {
    	    e.printStackTrace();
    	} catch(TransformerException e) {
    	    e.printStackTrace();
    	}
        }
    Aussi dans mon fichier XML, & est écrit & !
    Je cherche un moyen d'éviter cela. Merci de votre aide.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Ce n'est pas à toi de créer les entité pour représenter des caractères, c'est au Transformer. Et pour cause, l'utilisation de l'entité dépend de l'encodage. Si l'encodage choisi supporte le caractère donné, il sera mis tel quel. Sinon, il sera echappé en entité.


    Donc dans ton cas c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String elementCharText = "é"
    et non pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String elementCharText = "é"

  3. #3
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Mais alors, avec mes données (qui sont de la forme 2022),
    comment construire mon DOM
    et obtenir un élément XML <fo:character character="&#x2022;" />
    (c'est un élément XSL-FO), par exemple ?

    Voiçi ce que j'ai fait jusque là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for (int i = ce.getUnicodeStart(); i <= ce.getUnicodeEnd(); i++) {
      final Element elementChar = codeChartsDom.createElementNS(fontNS, "font:char");
     
      final String elementCharText = "&#x" + Integer.toHexString(i) + ";";
    						         elementChar.appendChild(codeChartsDom.createTextNode(elementCharText));
    rootElement.appendChild(elementChar);
    	    }

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu passe directement en string le caractère qui correspond à 2022:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (int i = ce.getUnicodeStart(); i <= ce.getUnicodeEnd(); i++) {
      final Element elementChar = codeChartsDom.createElementNS(fontNS, "font:char");
     
      elementChar.appendChild(codeChartsDom.createTextNode(""+(char)i));
    rootElement.appendChild(elementChar);
    	    }

  5. #5
    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
    À noter que si tu dois gérer des caractères au-delà de U+FFFF, ça devient plus compliqué. Un char Java ne peut contenir que de U+0000 à U+FFFF. Pour les autres il faut gruger, et un simple cast vers char n'ira pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String s = new String(Character.toChars(i));
    elementChar.appendChild(codeChartsDom.createTextNode(s));
    Ce qui marche pour tous les caractères unicodes.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Faudra vraiment que j'update mes liens de docs, je l'avais pas vue dans la 1.4 cette méthode

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

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