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

Modules Perl Discussion :

Comment forcer le style d'écriture des balises avec XMLout


Sujet :

Modules Perl

  1. #1
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 28
    Points : 20
    Points
    20
    Par défaut Comment forcer le style d'écriture des balises avec XMLout
    Bonjour,

    J'ai un code qui lit, modifie puis écrit des fichiers xml.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    use XML::Simple;
    my $xml=new XML::Simple (KeyAttr=>[]);
     
    my $lecturefichier=$xml->XMLin("monfichier.xml",ForceArray => ["declenchement","activite","traitement","modification"], ContentKey=>'texte');
      .... modifs dans $xml ...
    my $new_data=$xml->XMLout( $write->{xml},SuppressEmpty=>1,XMLDecl=>"<?xml version='1.0' encodig='UTF-8' standalone='yes'?>", noescape=>1);
     
    binmode FILE,":utf8";
    print FILE $new_data;
    close(FILE);
    Fichier en entrée :
    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
     
    <?xml version='1.0' encodig='UTF-8' standalone='yes'?>
    < opt type="regles" write="1">
      <regles_pp>
        <oper mod="xx" val="test" >
           <traitement mod="xx" val="Traitement premier" >
           </traitement>
           <traitement mod="xx" val="Traitement deux" >
                <modification var="modif" val="333.33">
                </modification>
           </traitement>
           <traitement mod="xx" val="Traitement fin" >
           </traitement>
        </oper>
      </regles_pp>
    </opt>

    A la sortie avec modification de la balise "modification"
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?xml version='1.0' encodig='UTF-8' standalone='yes'?>
    < opt type="regles" write="1">
      <regles_pp>
        <oper mod="xx" val="test" >
           <traitement mod="xx" val="Traitement premier" />
           <traitement mod="xx" val="Traitement deux" >
                <modification var="modif" val="443.33" />
           </traitement>
           <traitement mod="xx" val="Traitement fin" />
        </oper>
      </regles_pp>
    </opt>

    Certaines fins de balise "traitement" ont été modifiées ... :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        <traitement .....>
        </traitement>
    sont devenues :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
        <traitement .... />

    La réciproque est vraie aussi.

    Ce qui me dérange fortement car je dois effectuer une comparaison entre le fichier d'entrée et celui de sortie et les diffs sont illisibles à cause de ce phénomène.

    Y a-t-il un moyen de forcer les fins de balises avec retour à la ligne ? (comme dans le fichier en entrée)

    Merci de m'aider car je cherche depuis plusieurs jours et je ne trouve rien ...

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    je n'ai pas regardé en détail, mais le module XML::Simple est connu pour être déprécié (c'est-à-dire à ne pas utiliser pour de nouveaux programmes).

    La documentation le dit clairement: PLEASE DO NOT USE THIS MODULE IN NEW CODE.

  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 903
    Points : 6 685
    Points
    6 685
    Par défaut
    Pas trés engageant comme module:
    Citation Envoyé par from CPAN XML::Simple
    STATUS OF THIS MODULE

    The use of this module in new code is strongly discouraged. Other modules are available which provide more straightforward and consistent interfaces. In particular, XML::LibXML is highly recommended and you can refer to Perl XML::LibXML by Example for a tutorial introduction.

    XML::Twig is another excellent alternative.

    The major problems with this module are the large number of options (some of which have unfortunate defaults) and the arbitrary ways in which these options interact - often producing unexpected results.

    Patches with bug fixes and documentation fixes are welcome, but new features are unlikely to be added.
    Je sais qu'il existe une option LIBXML_NOEMPTYTAG pour l'implémentation de libxml en PHP qui force les self-closing tags à être déroulés, mais par contre je n'ai jamais vu d'option permettant de conserver l'état initial des balises (c'est soit tout fermé soit tout déroulé), du moins lorsqu'on parse en XML, et je n'est pas retrouvé cette option dans le module XML::LibXML (peut-être est-elle bien cachée ou alors elle porte un autre nom.)
    À noter que le fait que les balises soient déroulées ou pas n'a aucune importance, ça ne change pas les données ni la structure: le XML est un format pour stocker des données, c'est pas pour faire jolie.

  4. #4
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 28
    Points : 20
    Points
    20
    Par défaut
    Merci pour vos réponses ...
    Elles confirment ce que je pensais.

    Citation Envoyé par CosmoKnacki Voir le message
    À noter que le fait que les balises soient déroulées ou pas n'a aucune importance, ça ne change pas les données ni la structure: le XML est un format pour stocker des données, c'est pas pour faire jolie.
    --> Je sais que ce n'est pas pour faire joli ... mais je dois faire des comparaisons de fichiers xml et si les balises ne sont pas exactement pareilles j'ai beaucoup trop de diff et je ne peux pas les analyser ...

    Bonne journée

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 903
    Points : 6 685
    Points
    6 685
    Par défaut
    Si tu dois faire des comparaisons de fichiers XML, peut-être qu'un des modules XML::SemanticDiff ou XML::DifferenceMarkup peut faire l'affaire, ce qui t'évitera l'approche basée sur des comparaisons de chaînes de caractères.

  6. #6
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 28
    Points : 20
    Points
    20
    Par défaut
    Merci pour l'idée, mais la comparaison c'est pour une base git, donc c'est du texte ...

    J'ai résolu mon problème en appelant un shell après le XMLout qui fait un méchant awk suivi d'un xmllint --format.

    Voili, voilou ...

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/11/2017, 14h23
  2. Comment définir le style du texte sans balises ?
    Par Frank74 dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 09/12/2011, 15h27
  3. Réponses: 2
    Dernier message: 16/03/2011, 21h12
  4. Comment forcer la Mise en cache des données ?
    Par sybcat dans le forum Adaptive Server Enterprise
    Réponses: 1
    Dernier message: 12/03/2010, 08h16
  5. [WD-2007] Remplacer les styles Word par des balises plein texte
    Par CoCiv dans le forum VBA Word
    Réponses: 2
    Dernier message: 29/03/2009, 01h39

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