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 :

Fermeture de Balise [StAX]


Sujet :

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

  1. #1
    Membre confirmé Avatar de Andarus
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 137
    Par défaut Fermeture de Balise
    J'utilisais jusqu'à présent jdom pour traiter les données xml de mon programme. Devant la taille importante pris par les fichiers de sauvegarde j'ai décidé de me tourner vers StAX.

    Je réussis à lire et écrire mes fichiers xml, mais je n'arrive pas à créer des éléments courts lors de la sauvegarde.

    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
    14
    15
    16
    17
    18
    19
    20
    21
    public void saveXml(XMLEventWriter writer)
    {
    	XMLEventFactory eventFactory = XMLEventFactory.newInstance();
    	ArrayList<javax.xml.stream.events.Attribute> attributes = new ArrayList<>();
    	attributes.add(eventFactory.createAttribute(new QName("lat"), String.valueOf(48.3)));
    	attributes.add(eventFactory.createAttribute(new QName("lng"), String.valueOf(2.1)));
     
    	StartElement startElement = eventFactory.createStartElement(new QName("coordinate"), attributes.iterator(), null);
     
    	EndElement endElement = eventFactory.createEndElement(new QName(""), null);
     
    	try
    	{
    		writer.add(startElement);
    		writer.add(endElement);
    	}
    	catch (XMLStreamException e)
    	{
    		logger.warning("The save may be corrupted.");
    	}
    }
    donne pour résultat "<coordinate lng="2.1" lat="48.3"></coordinate>".

    Je cherche a obtenir : "<coordinate lng="2.1" lat="48.3"/>". ce qui peut représenter un gain non négligeable sur la taille du fichier final.

    J'ai regardé du coter de l'XMLEventFactory mais je ne trouve pas de méthode permettant de créer un StartElement ou un EndElement correspondant.

    Merci d'avance pour votre aide.

  2. #2
    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 n'ai pas beaucoup d'expérience en écriture avec StAX, mais en effet je ne vois pas comment faire ça avec un XMLEventWriter. On pourrait imaginer une propriété à régler dans le XMLOutputFactory, mais je n'en ai pas trouvé.

    Pourquoi pas un XMLStreamWriter à la place ? Il a des méthodes writeEmptyElement(), lui. Et il me semble globalement plus simple.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé Avatar de Andarus
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 137
    Par défaut
    Merci d'avoir pris le temps de chercher une solution à mon problème.

    Effectivement l'emploie d'un XMLStreamWriter convient parfaitement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public void saveXml(XMLStreamWriter writer)
    {	
    	try
    	{
    		writer.writeEmptyElement("coordinate");
    		writer.writeAttribute("lat", String.valueOf(48.3));
    		writer.writeAttribute("lng", String.valueOf(2.1));
    	}
    	catch (XMLStreamException e)
    	{
    		logger.warning("The save may be corrupted.");
    	}
    }
    Stax possédant deux API Cursor (bas niveau) et Event (haut niveau) je m'étais tourné d'office vers celle haut niveau pensant qu'elle serait plus simple .

    Tel que je le comprends L'API event semble être un bon choix pour la lecture, mais semble réservé en écriture à la modification de fichier (utile pour supprimer une partie du xml ou pour fusionner deux xml).

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/07/2007, 14h11
  2. [XHTML] outil de verification de fermeture de balise
    Par stross dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 18/07/2006, 17h06
  3. [XSL] ouverture fermeture de balise
    Par sebus dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/03/2006, 13h00
  4. innerHTML : fermeture de balise automatique ??
    Par pekka77 dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 17/11/2005, 17h51
  5. Problème de fermeture de balise <tr>
    Par nuage dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 18/03/2004, 09h55

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