supprimer certaines balises d'un fichier xml - Perl - Programmation
Marsh Posté le 15-02-2018 à 23:32:18
Comme ça fait un bon exercice de XSLT, je vais y répondre dans ce langage:
A la base, en xslt c'est simple:
Code :
|
Si tu veux exactement le même formatage en sortie qu'en entrée, comme tu n'as pas de modèle (dtd, rng...) associé, le parseur xsl ne peut savoir si ton formatage entre les TRAJ consiste en vrai nœuds texte significatifs pour le modèle ou pas. Il faut alors faire a la main le boulot pour ces nœuds texte.
Idem pour le formatage après la déclaration xml.
Ça donne une feuille de style un poil plus complexe, mais à peine:
Code :
|
Et tant que j'y étais, j'ai passé la valeur d'attribut filtrante comme un paramètre de la feuille de style (donc pouvant être positionné à l'appel) de valeur par défaut celle que tu donnes dans ton exemple.
Et sinon, pour ton programme perl, c'est parce que dans ton handler, tu cut les elements avec la mauvaise valeur d'attribut, mais tu ne dis pas ce que tu fais avec ceux qui ont la bonne: $TRAJ->print.
Ce qui donne en mettant tout ça au propre:
Code :
|
En sortie, c'est identique a ce que donnent mes 5 lignes de xsl du début de mon post.
A+,
Marsh Posté le 16-02-2018 à 23:38:09
Bonjour Gilou et merci!
effectivement il ne manquait pas grand chose même avec un code pas très propre!
Alors en réalité, il me faut filtrer une liste d'attributs issue d'un fichier texte, par exemple :
Code :
|
J'avais pensé utiliser la fonction index sur une longue chaine concaténée... et puis j'ai choisi de tester un hash couplé à la fonction exists, une première pour moi! Pas déçue, ça fonctionne bien!
J'ai adapté le fichier d'entrée:
Code :
|
Et voici le code de Gilou que j'ai adapté :
Code :
|
Point de détail : mon fichier de sortie comprend des lignes vides, est-ce qu'on peut les retirer?
Code :
|
Marsh Posté le 17-02-2018 à 16:33:52
Dans ce cas la on peut faire bien plus simple:
Code :
|
Et je te laisse décider de la meilleure manière de passer ta liste à la fonction qui dorénavant accepte une liste en dernier argument.
Les lignes vides, c'est parce que tu avais déclaré TRAJ en root + twig_print_outside_roots.
twig_print_outside_roots fait qu'il copie jusqu'a une balise TRAJ, saut de ligne inclus, avant d'appeler le handler.
Comme tu veux la même racine, on laisse tomber la déclaration de TRAJ en racine. Un va utiliser twig pour construire un nouvel arbre, sans les éléments TRAJ avec un attribut a une mauvaise valeur (donc plus de print dans le handler) et on imprime tout l'arbre construit, ce qui n'a aucune raison de générer des lignes vides.
A+,
Marsh Posté le 14-02-2018 à 16:34:52
Bonjour
J'ai réussi à construire un code permettant d'extraire des infos d'un fichier xml et les écrire dans un fichier texte grâce à la librairie TWIG.
Aujourd'hui, je cherche à adapter ce code pour supprimer certaines lignes et générer un xml allégé. je me suis tournée vers la fonction "twig_print_outside_roots".
Mon problème est que la sélection des lignes à supprimer ne fonctionne pas, càd que toutes les balises sont supprimées sans distinction.
Mon fichier xml d'entrée :
Le code testé :
Merci pour votre aide
Message édité par nafawana le 15-02-2018 à 14:40:12