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 :

Entity + DOM [JDOM]


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Par défaut Entity + DOM
    Bonjour, je suis en train de créer un fichier XML et j'ai besoin d'y ajouter des entity manuellement.
    Je n'arrive pas à trouver les méthodes pour les créer avec JDOM.
    J'ai utilise entityref mais les entites n'apparaissent pas dans la balise doctype

    voici ce que je souhaite avoir

    <!DOCTYPE SET PUBLIC "link file//EN" "set.dtd" [
    <!ENTITY file_id_1 SYSTEM "path/file_name_1" NDATA image_jpeg>
    ]>

    Merci d'avance

  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
    Infaisable avec JDOM, malheureusement.

    En dehors des entités internes, les références d'entité sont très peu utilisées en XML, et donc, comme d'hab', peu gérées par les outils.
    Personnellement je trouve qu'oublier que c'est censé exister, et utiliser de simples URLs vers les fichiers à pointer, permet d'éluder le problème.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Par défaut
    Ok merci pour la réponse qui m'embete énormément puisque le programme qui est chargé de lire mon xml attend ces indications. Et je ne possède pas le code source de celui-ci pour pouvoir agir sur le chargement.

    N'existe t-il pas une autre solution en java ? avec sax par exemple ?

  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
    Je me suis penché sur la question.

    En effet, il est possible d'écrire du XML avec SAX, bien qu'il y ait peu de documentation là-dessus. On peut trouver des exemples ici, sections (3) et (5).

    Par contre, avec juste la bibliothèque de base Java, je n'arrive pas à lui faire insérer de déclaration d'entité unparsed.

    J'y arrive en utilisant la bibliothèque Xerces 1.4.4, comme indiqué en (3) dans le lien au-dessus.

    Voici un exemple qui le fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    OutputFormat of = new OutputFormat("XML","ISO-8859-1",true);
    XMLSerializer serializer = new XMLSerializer(System.out, of);
    AttributesImpl atts = new AttributesImpl();
     
    serializer.startDocument();
    serializer.startDTD("SET", "link file//EN", "set.dtd");
    serializer.notationDecl("image_jpeg", "link file//EN/JPEG", "jpegNote");
    serializer.unparsedEntityDecl("file_id_1", null, "path/file_name_1", "image_jpeg");
    serializer.endDTD();
    serializer.startElement("","SET","SET",atts);
    serializer.endElement("","SET","SET");
    serializer.endDocument();
    Dont voici le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE SET PUBLIC "link file//EN"
                         "set.dtd" [<!NOTATION image_jpeg PUBLIC "link file//EN/JPEG" "jpegNote">
    <!ENTITY file_id_1 SYSTEM "path/file_name_1" NDATA image_jpeg>
    ]>
    <SET/>
    C'est pas terrible niveau indentation, mais je ne suis pas arrivé à faire mieux simplement.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Par défaut
    Merci pour la réponse et désolé d'avoir mis du temps à répondre.
    Effectivement je suis arrivé à la même conclusion que toi : utiliser sax. J'avais trouvé le même exemple que toi.

    Par contre j'ai utilisé un autre exemple avec une classe XMLWriter que j'ai trouvé sur le net (http://www.java2s.com/Code/Java/XML/...MLdocument.htm) qui me permet de redéfinir certaines méthodes de XMLFilterImpl et de LexicalHandler. Du coup je suis arrivé avec ça. Mais ça reprend exactement le même principe que tu propose.


    xmlWriter.startDTD("TEAMS_ASSET_FILE", "DTD asset and link file//EN", "asset.dtd" );
    xmlWriter.startEntity("file_id_"+numberFile,"chemin acces"+ s, "image_jpeg");
    xmlWriter.endDTD();
    Concernant l'indentation, ce que j'utilise ne le permets pas également naturellement. Je me charge donc de le faire manuellement.
    Merci en tout cas de tes recherches et ta réponse !

  6. #6
    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 suppose que ce n'est pas important pour toi, mais :

    - ce que tu cherches à faire, c'est censé être avec unparsedEntityDecl, pas avec startEntity().
    - En principe, startEntity() est supposé être suivi d'au moins un characters() et terminé par un endEntity().

    Cette classe XMLWriter, est bien. Mais Xerces fait mieux quand on a des guillemets, apostrophes, accents...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [XML] Entity DOM
    Par tib59 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 17/02/2011, 18h05
  2. XML DOM et gros fichiers
    Par Manu_Just dans le forum APIs
    Réponses: 4
    Dernier message: 28/03/2003, 09h50
  3. [DOM/SAX]Choix...
    Par miss8 dans le forum APIs
    Réponses: 4
    Dernier message: 17/03/2003, 18h37
  4. pb formatage document XML généré par un dom tree
    Par lionel69 dans le forum APIs
    Réponses: 11
    Dernier message: 17/10/2002, 09h53
  5. Réponses: 3
    Dernier message: 04/09/2002, 09h42

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