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 :

Afficher un espace


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 4
    Par défaut Afficher un espace
    Bonjour,

    Je créé actuellement un document xml et je tombe sur un OS.
    Voici mon problème,

    Je cherche a faire :

    donc pour avoir

    J' ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Element Elem_1 = new Element("b");
    Elem_1.setText(String.valueOf(" "));
    mais cela me donne :

    Je ne sais pas comment faire pour lui dire que mon espace est un caractere a prendre en compte.
    Par exemple si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Element Elem_1 = new Element("b");
    Elem_1.setText(String.valueOf("."));
    J'ai bien :
    Donc c'est uniquement l espace qu'il ne considere pas et me cree un element vide.

    Merci de 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
    C'est pas courant comme besoin.

    Ton problème vient du "pretty format," le truc qui fait en sorte que tes <a> et </a> soient sur des lignes différentes et qu'il y ait une indentation devant le <b>.
    Ça fonctionne en supprimant tous les blancs et en en insérant d'autres pour faire joli. Et ça s'applique aussi au contenu de <b> si c'est un blanc, normal.

    - Le plus simple est d'enlever le pretty-format et tant pis si c'est pas joli... Mais à ce niveau-là, on se demande à quoi sert XML.

    - Le deuxième plus simple est s'arranger pour qu'à l'interprétation du XML, un espace ou rien du tout ce soit considéré pareil. Mais ce n'est pas toujours possible.

    - Le troisième plus simple est d'utiliser xml:space='preserve' sur les éléments où les blancs sont importants, ça sert à ça après tout. Mais c'est contraignant.

    - Ma solution (que j'estime quatrième plus simple,) consiste à programmer soi-même son output pour fonctionner en deux phases :
    -- protéger les espaces
    -- réaliser l'output pretty-format
    -- reparser ce résultat dans un Document, qui contient maintenant la jolie indentation
    -- enlever la protection des espaces
    -- faire un output raw-format.

    Exemple :

    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
    public class PrettyOutput {
     
      public static void main(String... args) throws IOException, JDOMException  {
        Document doc = new Document();
        doc.setRootElement(new Element("a"));
        Element b = new Element("b");
        doc.getRootElement().addContent(b);
        b.setText(" ");
        Collection<Element> preserveElements = Arrays.asList(new Element("b"));
     
        prettyOutput(doc, System.out, preserveElements);
      }
     
      public static void prettyOutput(Document doc, OutputStream out, Collection<Element> preserveElements) throws JDOMException, IOException {
        doc = doc.clone(); // on veut pas forcément modifier le document d'origine
     
        // Protéger les espaces des éléments à préserver 
        for(Element preserveElement : preserveElements) {
          for(Element toPreserve : doc.getDescendants(Filters.element(preserveElement.getName(), preserveElement.getNamespace()))) {
            toPreserve.setAttribute("space", "preserve", Namespace.XML_NAMESPACE);
          }
        }
     
        // première passe : jolie indentation
        String firstStage = new XMLOutputter(Format.getPrettyFormat()).outputString(doc);
        doc = new SAXBuilder().build(new StringReader(firstStage));
     
        // Enlever les protections
        for(Element preserveElement : preserveElements) {
          for(Element preserved : doc.getDescendants(Filters.element(preserveElement.getName(), preserveElement.getNamespace()))) {
            preserved.removeAttribute("space", Namespace.XML_NAMESPACE);
          }
        }
     
        // output final
        new XMLOutputter().output(doc, out);
      }
     
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 4
    Par défaut
    - Le deuxième plus simple est s'arranger pour qu'à l'interprétation du XML, un espace ou rien du tout ce soit considéré pareil. Mais ce n'est pas toujours possible.
    Oui c'était surtout ca.
    Je cherchais une méthode pour trouver le moyen de lui dire le caractère espace comme "\\" affiche \

    Mais la dernière solution fonctionne même si c'est bien compliquer pour juste un petit espace.

    Merci de l'aide.

  4. #4
    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 Warlart Voir le message
    Oui c'était surtout ca.
    Je cherchais une méthode pour trouver le moyen de lui dire le caractère espace comme "\\" affiche \
    Il y a rien à chercher, si on veut ça il faut le faire, c'est tout. C'est pas caché sous un caillou.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Afficher les espaces sous VIM
    Par timous dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 18/07/2008, 23h53
  2. Afficher les espaces dans une PROC REPORT
    Par Fatah93 dans le forum ODS et reporting
    Réponses: 6
    Dernier message: 07/05/2008, 21h30
  3. Afficher l'espace disk disponible
    Par jfmerveille dans le forum Sybase
    Réponses: 1
    Dernier message: 07/06/2007, 10h30
  4. Ne pas afficher d'espace vide lorsqu'on masque un <div>
    Par guybrush007 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/08/2006, 11h02
  5. Réponses: 10
    Dernier message: 28/05/2005, 11h19

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