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

APIs XML Discussion :

pb formatage document XML généré par un dom tree


Sujet :

APIs XML

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 33
    Points : 18
    Points
    18
    Par défaut pb formatage document XML généré par un dom tree
    Bonjour,

    J'ai créer une classe dans laquele je construit un arbre dom.
    Mon arbre est parfaitement généré, le code XML est bon mais quand j'ouvre mon fichier avec un éditeur (exemple ultraedit) je n'ai aucun retour à la ligne. tout est enchainé , pas pratique pour le lire avec un editeur (ou eventuellement le modifier à la main).
    C'est vrai c'est un détail...
    Mais bon si on peut le faire j'aimeais bien savoir...

    Merci d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 40
    Points : 48
    Points
    48
    Par défaut
    C'est un cas assez classique ...

    As-tu une DTD sur ton XML ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    j'avoue que je ne me suis pas soucié des masses de la DTD!

    j'en ais une mais je ne l'ai pas couplé au parser.

    Je m'en vais essayer ça...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    j'ai couplé la DTD....

    mais rien n'y fait!

    Cela ne peut -il pas venir de l'encoding type?
    <?xml version="1.0" encoding="UTF-8"?>

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 40
    Points : 48
    Points
    48
    Par défaut
    Non, après faut voire du coté des options de ton objet Java Transformer.

    En fait, la DTD est indispensable pour pouvoir reparser le XML indenté (parce que sinon, le parseur il fout plein de textNode vide à chaque retour chariot...)

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    humm

    en fait je compare 2 arbres et j'en genere un autre!

    J'obtiens au final un Document qui contient mon arbre résultat.
    Mais pour parser (en utilsant la DTD) il faut soit un file, soit un inputstream et je vois pas trop comment faire avec mon Document ...

    J'utilise jaxp comme parser.

    Si qqun avec du code exemple pour parser un arbre généré ça me depannerai! Je suis preneur aussi pour du code pour parser un document en dOm avec une DTD...

    MErci beaucoup pour toutes ces reponse qui me depannent bien!

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 40
    Points : 48
    Points
    48
    Par défaut
    JAXP permet de faire ca !

    J'ai déjà répondu à cette question dans le forum,

    http://www.developpez.net/forums/vie...hlight=#140339

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    vi

    je suis d'acoord avec toi.
    Cependant là je créé un arbre en mémoire (sans parser un fichier)
    et apres je l'enregistrer dnas un ficher XML.

    Lorsque j'enregistre celui ça je n'ai pas de retour chariot, tout est bout a bout dnas mon fichier.
    Comme tu me l'as preconiser, j'ai cherché à parser mon arbre en memoire avant de l'enregistrer mais je ne vois pas comment faire avec jaxp puisqu'un builder.parse() prend en paramtre soit un fichier soit un Inpustream. voilà :)

    J'a irésolu pas mal de pb grâce a ton aide et à l'aide du tutoriel Java mais j'ai toujours ce pb avec mes retours chariots :(

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 40
    Points : 48
    Points
    48
    Par défaut
    J'ai tout relu et ma réponse ne va pas te plaire :

    Ce que je t'ai donné comme réponse, c'est pas pour la bonne question effectivement :

    Si ta question c'est comment parser correctement un fichier indenté, ma réponse est bonne.

    Après relecture, je retente ma chance :

    Malheureusement, c'est pas possible avec JAXP (et plus énéralement avec DOM), il faut utiliser JDOM à ma connaissance.

    J'ai tout de même une sollution de dernière les fagots :

    -> Ecrit une transformation XSL qui indente automatiquement ton XML.

    Ca donne un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl&#58;template match="*">
    <xsl&#58;text>
    </xsl&#58;text> <!-- On commence tout noeud par un retour chariot -->
    <xsl&#58;for-each select="*"><xsl&#58;text>  </xsl&#58;text> <!-- on indente de 2 espaces et tu recopies ton noeud NON RECURSIVEMENT, c'est pas fait ici, mais ca peut être simplifié suivant ta structure--><xsl&#58;apply-templates select="."/>
    </xsl&#58;for-each>
    </xsl&#58;template>
    Voila une idée de secours !

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Mais question etaitbien :
    Comment faire pour ke le code XML géré à paritr d'un arbre crée "à la main en mémoire" (sans parsing) ne soit pas bout à bout?

    Exemple j'ai dans mon fichier xml fichier généré :
    <personne><nom>toto</nom><prenom>titi</prenom></personne>
    et je voudrais :
    <personne>
    <nom>toto</nom>
    <prenom>titi</prenom>
    </personne>

    (je demande meme pas les espaces :D )

    En gros ça revient à ajouter un '\n' apres chaque noeud...

    Je vais donc etudier l'histoire du XSL.... J'y connais absolument rien...
    mais si ça arrange mon ficher c'est bon!

    Juste un petit doute :
    Xsl ça restrucutre mon fichier en lui meme ou ça arrange l'affichage?
    parce le but est ke mon fichier soit bien formé pour l'édition...

    merci encore :)

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    J'ai trouvé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TransformerFactory tfactory = 	TransformerFactory.newInstance&#40;&#41;;
    Transformer tranformer = tfactory.newTransformer&#40;&#41;;
    tranformer.setOutputProperty&#40;OutputKeys.INDENT, "yes"&#41;;
    ça met les retours chariots à chaque fin de noeud!

    Merci

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 40
    Points : 48
    Points
    48
    Par défaut
    Impecable,

    En gros, ma méthode avec XSL, c'est pas loin de ce que fait le transformer...

    La différence, c'est que l'indentation aurait été faite en passant un agument vers le XSL dans le Tansformer.newInstance(<ARG vers XSL>)

    Mais renseigne toi sur le XSL, si tu as des pbs de mise en forme, c'est très puissant et très interessant...

    A+

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

Discussions similaires

  1. Flux XML généré par le script PHP incomplet
    Par L.nico dans le forum Langage
    Réponses: 1
    Dernier message: 29/06/2008, 16h27
  2. [DOM] Entités dans les attributs d'un XML généré par DOM
    Par angelinemm dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 19/05/2008, 10h26
  3. [AJAX] Transfert de document xml généré par php
    Par flash_math dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/11/2007, 13h03
  4. [XSLT] Erreur XML généré par php "semble pas avoir d'information de style"
    Par Overstone dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 01/08/2007, 19h59
  5. [JDOM] Fichier xml généré par jdom
    Par vero59 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 05/08/2005, 17h30

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