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 :

Un getTextTrim qui retourne du vide ?


Sujet :

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

  1. #1
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut Un getTextTrim qui retourne du vide ?
    Bonjour,

    J'ai un petit problème... de compréhension de l'API JDOM ?

    Voici ce à quoi ressemble mon fichier XML pour ce qui nous intéresse :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      <question>
       <preformatedHTMLText>
          <p>Pierre et Paul sont sur un bateau. Ce dernier lit un livre.<br /> Le terme " ce dernier " se rapporte-t-il à Pierre ? </p>
        </preformatedHTMLText>
      </question>

    En java, je récupère un élément question et je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    		  System.out.println("["+question.getChild("preformatedHTMLText").getValue()+"]");
    		  System.out.println("["+question.getChild("preformatedHTMLText").getValue().trim()+"]");
    		  System.out.println("["+question.getChild("preformatedHTMLText").getText()+"]");
    		  System.out.println("["+question.getChild("preformatedHTMLText").getTextTrim()+"]");
    Ce qui m'affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [
          Pierre et Paul sont sur un bateau. Ce dernier lit un livre. Le terme " ce dernier " se rapporte-t-il à Pierre ? 
        ]
    [Pierre et Paul sont sur un bateau. Ce dernier lit un livre. Le terme " ce dernier " se rapporte-t-il à Pierre ?]
    [
     
        ]
    []
    j'ai mis les balises code car les espaces sont significatifs.

    Ma question : Pourquoi est-ce que je ne peux pas récupérer tout simplement :
    <p>Pierre et Paul sont sur un bateau. Ce dernier lit un livre.<br /> Le terme " ce dernier " se rapporte-t-il à Pierre ? </p>
    Pour moi, c'est ce que devrait faire
    question.getChild("preformatedHTMLText").getTextTrim()
    ou encore
    question.getChild("preformatedHTMLText").getValue().trim()

    mais getTextTrim... me renvoie du vide.
    et getValue.trim() me vire (?) mes balises <p>...

    Une idée ?

    Merci à vous,
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  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
    JDOM ne va pas te mettre des balises dans le texte. C'est de la structure DOM, pas du nœud texte.

    Si tu veux transformer de la structure DOM en texte XML, il faut utiliser un XMLOutputter. En l'occurence, sur les enfants de <preformatedHTMLText>.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut
    Il est vrai que j'en ai oublié la structure même de DOM...

    Normal qu'il ne veuille pas m'afficher le tout puisqu'il s'agit d'une arborescence DOM...

    un :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		  Element preformatedHTMLText = question.getChild("preformatedHTMLText");
    		  XMLOutputter test = new XMLOutputter();
    		  String str = test.outputString(preformatedHTMLText);
    		  System.out.println(str);

    me rend ceci :
    <preformatedHTMLText>
    <p>Pierre et Paul sont sur un bateau. Ce dernier lit un livre.<br /> Le terme " ce dernier " se rapporte-t-il à Pierre ? </p>
    </preformatedHTMLText>
    ne me reste qu'à trouver comment le récupérer sans la balise de preformatedHTMLText et les whitespaces

    Merci
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  4. #4
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut
    J'ai trouvé une solution mais...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    		  Element preformatedHTMLText = question.getChild("preformatedHTMLText");
    		  XMLOutputter test = new XMLOutputter();
    		  String str = test.outputString(preformatedHTMLText);
    		  str = str.replaceAll("<preformatedHTMLText>","");
    		  str = str.replaceAll("</preformatedHTMLText>","");
    		  str = str.trim();
    		  System.out.println(str);
    Quelque chose de plus élégant pourrait m'être proposé ?
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  5. #5
    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 : 46
    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
    Le format de ton fichier XML "sent mauvais". Je m'explique. Avec ton format actuel, cela signifique que ton format "étends" d'une certaine manière le format XHTML. Si un jour tu dois valider, tu va avoir toutes les peines du monde à écrire ton XSD. Un format plus respectueux du xml serait plutot:


    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <qs:questions xmlns="http://www.w3.org/1999/xhtml" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:qs="http://monprojet/schema/questions"
    xsi:schemaLocation="http://monprojet/schema/questions ........location......"
      <qs:question>
       <qs:preformatedHTMLText>
          <p>Pierre et Paul sont sur un bateau. Ce dernier lit un livre.<br /> Le terme " ce dernier " se rapporte-t-il à Pierre ? </p>
        </qs:preformatedHTMLText>
      </qs:question>
    </qs:questions>
    et encore, les validateurs coinceront car <p> n'est pas dans un <body>

    Autre option, le format "je me casse pas la tête" que j'utilise habituellement pour des cas comme ça (stockage de fragments html dans un fichier xml)
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      <question>
       <preformatedHTMLText><![CDATA[
          <p>Pierre et Paul sont sur un bateau. Ce dernier lit un livre.<br /> Le terme " ce dernier " se rapporte-t-il à Pierre ? </p>
        ]]></preformatedHTMLText>
      </question>

    Dans ce dernier cas, le getTextTrim() te donnera le contenu de la CDATA avec les balises et tout, code minimal :p

    Si tu garde le fichier d'origine,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		  Element preformatedHTMLText = question.getChild("preformatedHTMLText");
    		  XMLOutputter test = new XMLOutputter();
    		  String str = test.outputString(preformatedHTMLText.getChildren());
    		  System.out.println(str);

  6. #6
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut
    En fait... J'ai déjà mon XSD...

    Mais devant le peu de ressources qui n'expliquent rien du tout...
    et oui, j'ai des problèmes à la validation ^^'

    Code xml : 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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    <?xml version="1.0"?>
    <xs:schema
      xmlns='http://www.w3.org/1999/XMLSchema'
      targetNamespace='http://www.w3.org/1999/XMLSchema'
      xmlns:xs='http://www.w3.org/1999/XMLSchema'>
      <xs:include schemaLocation="http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd"/>
     
     <xs:element name='questions'>
      <xs:complexType>
       <xs:sequence>
        <xs:element ref='xs:question' maxOccurs='unbounded'/>
       </xs:sequence>
      </xs:complexType>
     </xs:element>
     
     <xs:element name='question'>
      <xs:complexType>
       <xs:sequence>
        <xs:element ref='xs:label'/>
        <xs:element ref='xs:typeOfAnswer'/>
        <xs:element ref='xs:minimumNumberOfAnswer'/>
        <xs:element ref='xs:coveringRate'/>
        <xs:element ref='xs:preformatedHTMLText'/>
        <xs:element ref='xs:tags'/>
       </xs:sequence>
      </xs:complexType>
     </xs:element>
     
     <xs:element name='typeOfAnswer'>
      <xs:complexType>
      </xs:complexType>
     </xs:element>
     
     <xs:element name='boolean'>
      <xs:complexType/>
     </xs:element>
     
     <xs:element name='minimumNumberOfAnswer'>
      <xs:complexType mixed='true'>
      </xs:complexType>
     </xs:element>
     
     <xs:element name='coveringRate'>
      <xs:complexType mixed='true'>
      </xs:complexType>
     </xs:element>
     
     <xs:element name='label'>
      <xs:complexType mixed='true'>
      </xs:complexType>
     </xs:element>
     
     <xs:element name='preformatedHTMLText'>
      <xs:complexType>
       <xs:sequence>
        <xs:element ref='xs:Flow'/>
       </xs:sequence>
      </xs:complexType>
     </xs:element>
     
     <xs:element name='tags'>
      <xs:complexType>
       <xs:sequence>
        <xs:element ref='xs:tag' maxOccurs='unbounded'/>
       </xs:sequence>
      </xs:complexType>
     </xs:element>
     
     <xs:element name='tag'>
      <xs:complexType mixed='true'>
      </xs:complexType>
     </xs:element>
    </xs:schema>

    En fait, le besoin était de pouvoir rapatrier l'élément Flow de xHTML...
    Car le preformatedTextHTML doit être valide xHTML... du fait qu'il sera inclus dans la page
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

Discussions similaires

  1. Requête qui retourne un résultat vide
    Par ELALAOUI2 dans le forum SPARQL
    Réponses: 1
    Dernier message: 26/05/2015, 15h07
  2. Fonction qui retourne plusieurs valeurs !
    Par casafa dans le forum C++
    Réponses: 20
    Dernier message: 23/04/2014, 16h56
  3. Réponses: 15
    Dernier message: 05/10/2012, 19h08
  4. Réponses: 15
    Dernier message: 30/08/2008, 10h01
  5. Réponses: 14
    Dernier message: 09/04/2004, 13h44

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