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 :

Impossible de parser une clef DSA dans un XML ? [DOM]


Sujet :

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

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2010
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Impossible de parser une clef DSA dans un XML ?
    Bonjour,
    je dois parser un XML pour faire une modification dedans.
    Le document XML contient une clef DSA qui est à l'intérieur d'un des élements :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ...
    <option key="Public Key" value="-----BEGIN DSA PRIVATE KEY-----
    MIIBuwIBAAKBgQCXv9AzQXjxvXWC1qu3CdEqskX9YomTfyG865gb4D02ZwWuRU/9
     
    
     
    mbX5nxrld3wi5titTnX+8s4IKv29HJguPvOK/SI7cjzA+SqNfD7qEo8CFDIm1xRf
    8xAPsSKs6yZ6j1FNklfu
    -----END DSA PRIVATE KEY-----
    " />
    <option key="User" value="user" />
    ...

    Quand je le parse avec DOM, ça me met tout sur une seule ligne, en remplaçant les sauts de ligne par des espaces :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <option key="Public Key" value="-----BEGIN DSA PRIVATE KEY----- MIIBuwIBAAKBgQCXv9AzQXjxvXWC1qu3CdEqskX9YomTfyG865gb4D02ZwWuRU/9  …. -----END DSA PRIVATE KEY-----" />
    Le programme qui utilise ce fichier XML doit impérativement avoir la clef sous la forme standard (comme dans le premier extrait de code). Si elle n'a pas cette forme, elle est considérée corrompue.

    Je lis le fichier de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
     
    dbf.setIgnoringComments(true);						
    dbf.setValidating(false);
     
    dbf.setFeature("http://apache.org/xml/features/dom/include-ignorable-whitespace", true);
    dbf.setFeature("http://xml.org/sax/features/validation", false);
    dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);
    dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
     
    DocumentBuilder db = dbf.newDocumentBuilder();
     
    Document doc = db.parse(file);

    et je l'écris de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Prepare the DOM document for writing
    Source source = new DOMSource(doc);
     
    // Prepare the output file
    File file = new File(filename);
    Result result = new StreamResult(file);
     
    Transformer xformer = TransformerFactory.newInstance().newTransformer();
    xformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
    xformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,"");
    xformer.transform(source, result);
    Est-ce que quelqu'un connaît le moyen de garder la clef "telle quelle" ?
    Ou est-ce que quelqu'un a eu un problème similaire ?

    Il semble que les options que je peux modifier n'affecte pas ce comportement...

    Merci d'avance

    dondamiano

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 615
    Points
    21 615
    Par défaut
    En fait, dans un attribut, quand on va à la ligne, c'est un espace. C'est ce que ça veut dire. Il ne s'agit pas d'un problème ou d'un effet non voulu. C'est comme ça. Ne pas en tenir compte démontre d'une méconnaissance de XML.
    Par conséquent, aucune option au monde n'y changera rien, puisque c'est le seul comportement correct.

    Maintenant, il y a plusieurs approches :
    - Sans modifier le XML : avant d'exploiter cet attribut, remplacer les espaces en question par des sauts de ligne.
    - En modifiant le XML de manière idéale : une chose pareille ne se stocke pas dans un attribut, mais dans un élément.
    - En modifiant le XML juste assez pour ne rien changer d'autre : il suffit de mettre la référence d'entité fin de ligne &#xA; à la place des fins de ligne. Cela indique que l'on veut spécifiquement ce caractère, et qu'il ne s'agit pas d'un whitespace.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2010
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Bonsoir,
    merci telvin pour cette réponse détaillée.
    J'ai bien compris la notion de whitespace et la manière dont ils sont géré en XML.
    C'était bien la conclusion à laquelle j'étais arrivé, à savoir que ce fichier XML n'est pas "aux normes"...

    Je n'ai que le fichier XML et malheureusement aucun contrôle sur le programme qui l'utilise.
    J'ai essayé de remplacer manuellement les sauts de ligne par &#xA;
    C'est sale comme méthode, mais au moins ça me permet de parser et écrire un nouveau fichier et ça marche comme ça....

    Maintenant que j'ai une solution fonctionnelle, la blague c'est qu'après que le programme qui utilise le XML l'ait parser, celui-ci le modifie pour le remettre sous sa forme originale, donc &#xA; est réellement remplacer par un vrai saut de ligne.

    Ils se sont apparemment donné de la peine pour qu'on ne puisse pas parser proprement leur fichier...

    Merci en tout cas pour l'aide qui m'a permis de mieux comprendre certains élements.

    Bonne soirée

    dondamiano

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/02/2008, 19h17
  2. Impossible de créer une table temporaire dans une fonction
    Par bossun dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 05/10/2007, 10h03
  3. Réponses: 3
    Dernier message: 24/07/2007, 18h06
  4. Comment comment définir une clef primaire dans une table??
    Par nek_kro_kvlt dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/02/2005, 21h06

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