J'ai un fichier XML dans une variable de chaîne ($data
), et un hachage contenant tous les noms de balises et leur contenu (%field_list
).Comment puis-je rechercher et remplacer du code XML en fonction des valeurs d'un hachage Perl?
Les noms de points doivent être vérifiés de sorte que, s'il s'agit de champs énumérés, leur contenu soit remplacé par des chaînes.
Est-ce que quelqu'un sait s'il est possible de le faire avec la recherche et le remplacement? Je n'ai pas beaucoup de chance en ce moment.
foreach my $field (sort keys %field_list)
{
my $value = $field_list{$field};
# will return a non-empty string if field is enumerated and value is valid
my $enum_string = &convert_enumeration_to_string($field, $value);
if ($enum_string ne "")
{
#syntax error
$data =~ s/<($field)>($value)</($field)>/<($field)>($enum_string)</($field)>/g;
}
}
Est-ce que quelqu'un sait si je peux faire quelque chose ou ai-je besoin d'une approche complètement différente?
Je ne réponds pas à votre question mais je vous conseille plutôt de le faire. Vous ne devriez vraiment pas utiliser les expressions rationnelles avec xml. Utilisez l'un des nombreux modules XML trouvés sur cpan. Commencer avec XML :: Simple – Nifle
Je voulais juste ajouter du poids à cela parce que d'autres personnes semblent l'encourager passivement en vous donnant une solution - analyser XML avec regex est retardé: d'autres alternatives qui pourraient vous intéresser seraient XML :: Twig ou XML :: LibXML –
S'il vous plaît aller voter pour http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 ;-)) –