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 :

[XML] [Debug] saut ligne renvoi un noeud


Sujet :

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

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 44
    Points : 24
    Points
    24
    Par défaut [XML] [Debug] saut ligne renvoi un noeud
    bonjour,

    j'ai un petit problème avec l'utilisation d'un parser xml. Voilà un bout de mon fichier xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0"?>
    <!DOCTYPE config SYSTEM "config.dtd">
    <config>
    <mapcollection>
    <extent minx="100" miny="200" maxx="300" maxy="400"/>
    <size width="800" heigh="600"/>
    Ce fichier xml sert à configurer mon appli.
    Voici maintenant un bout de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setValidating(true);
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document _document = builder.parse(file);
    Element root= _document.getDocumentElement();
    Node child= root.getFirstChild();
    Le problème est que la dernière ligne du code ne retourne pas le noeud mais le saut de ligne qui est avant. Comment faire pour passer outre les sauts de ligne ?

    [ Modéré par Viena ]
    Ajout d'un tag et modification du titre : Pour la compréhension de tous, utilisez un titre clair et les tags ! merci.

    Les Règles du Forum

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Peut-être qu'il y a un problème dans ta dtd ? Peux-tu nous la montrer ?

    K
    K

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    La voilà ma dtd
    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
    <!-- config.dtd -->
    <!ELEMENT config (mapcollection)>
    	<!ELEMENT mapcollection (extent,size,units,overview*,projection?,map+)>
    		<!ELEMENT extent EMPTY>
    			<!ATTLIST extent minx CDATA #REQUIRED>
    			<!ATTLIST extent miny CDATA #REQUIRED>
    			<!ATTLIST extent maxx CDATA #REQUIRED>
                            <!ATTLIST extent maxy CDATA #REQUIRED>
    		<!ELEMENT size EMPTY>
    			<!ATTLIST size width CDATA #REQUIRED>
    			<!ATTLIST size height CDATA #REQUIRED>
    		<!ELEMENT units (#PCDATA)>
    		<!ELEMENT overview (image,role*)>
    			<!ELEMENT image (#PCDATA)>
    		<!ELEMENT projection (#PCDATA)>
    		<!ELEMENT map (layer+)>
    			<!ATTLIST map format (image|vector) #REQUIRED>
    			<!ELEMENT layer (title?,role*)>
    				<!ATTLIST layer name ID #REQUIRED>
    				<!ATTLIST layer default (true|false) #REQUIRED>
    				<!ELEMENT title (#PCDATA)>
    				<!ELEMENT role EMPTY>
    					<!ATTLIST role name (aministrator|restricted) #REQUIRED>

  4. #4
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Le problème peut venir du commentaire.
    Il me semble qu'au niveau des DTD, chaque balise <! ... > peut contenir un commentaire du type -- commentaire --

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <!ELEMENT id --identifiant du beneficiaire-- (bla)>
    Essaies d'enlever le commentaire dans un premier temps.
    Je ne suis pas sûr,
    K
    K

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    J'ai essayé et le problème ne vient pas de là. La dtd est validée par la ligne
    factory.setValidating(true);
    qui ne renvoie aucune erreur. Lorsque je remplace la ligne
    Node child = root.getFirstChild();
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Node child = root.getFirstChild().getNextSibling();
    et que je demande d'afficher le nom du noeud il me retourne bien
    mapcollection
    ce qui signifie que le premier noeud qu'il trouve est le saut de ligne et ça c'est pas normal

  6. #6
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Et si tu ne mettais pas de saut de ligne ?
    Juste pour tester dans un premier temps..

    K
    K

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    Lorsque je ne mets pas les sauts de ligne ça fonctionne. Le problème c'est que le fichier xml est assez long, du coup si je ne mets pas de sauts de ligne c'est ingérable

  8. #8
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Quel est le parser que tu utilises ?
    K

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    voilà ce que j'importe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import java.io.*;
    import javax.swing.JOptionPane;
    import javax.xml.parsers.*;
    import org.w3c.dom.*;
    import org.xml.sax.*;
    je dois donc utiliser dom

  10. #10
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Et en plaçant un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Document _document = builder.parse(file); 
    _document.normalizeDocument();
    Est-ce que ça aide ?
    J'ai l'impression qu'il y a un souçis dans le format du fichier, non ?

    K
    K

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    Ca ne change rien. Je pense savoir d'où vient le problème mais je ne sais pas le résoudre. Je crois que cela vient du fait que les sauts de ligne qui normalement s'écrivent sont écrits sous windows. Alors soit il existe une méthode dom permettant de le corriger, soit il faut récupérer dans un inputstream le contenu du fichier et le retravailler pour faire disparaître les sauts de ligne. Mais dans les deux cas je ne sais pas comment faire.

  12. #12
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 44
    Points : 24
    Points
    24
    Par défaut

  13. #13
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Théoriquement, Java connait les différents types de newline, et tu ne devrais rien avoir à faire pour que ça fonctionne.
    De plus le parser "normalement" ( car dans ton cas on dirait que c'est différent ?? ) ne doit même pas tenir compte des espaces entres les balises ni des sauts de lignes.
    Si le problème vient vraiment de là, rien ne t'empêche de faire une fonction qui transformera tes "\n" en "\r\n" avant le traitement XML, mais ça me parrait plus une rustine qu'une solution.
    Si quelqu'un a une idée du problème qu'il se prononce

    Bon courage, désolé de ne pas pouvoir t'aider plus que ça. Ah si, tu peux également regarder dom4j, qui est une API Java puissante pour le parsing XML, qui peut-être ne présente pas le même probleme.

    K
    K

  14. #14
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    j'ai trouvé un moyen de contourner le problème. Etant donné que j'ai une dtd, je connais le nom des éléments présents dans le fichier XML. Du coup je n'ai plus qu'à utiliser la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getElementsByTagName("nom_de_l_element")
    qui retourne la liste des éléments recherchés. Merci pour ton aide

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/10/2008, 20h54
  2. [JTree] Libelle multi-ligne d'un noeud
    Par dmasse dans le forum Composants
    Réponses: 6
    Dernier message: 22/07/2005, 15h48
  3. [XML]xml et dtd : récursivité d'un noeud
    Par Jeddo dans le forum Valider
    Réponses: 2
    Dernier message: 29/04/2005, 17h25
  4. [VB.NET][XML] Récupere l'attribut du dernier noeud ds un XML
    Par Hoegaarden dans le forum Windows Forms
    Réponses: 2
    Dernier message: 30/09/2004, 14h14
  5. [DomAST] Numéro de ligne d'un noeud
    Par Satch dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 30/03/2004, 10h15

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