2010-11-28 3 views
2

Possible en double:
how to read a text file and use it to update XML tag with perlComment ajouter des balises et des attributs dans un fichier XML en utilisant perl?

Salut,

J'ai un document XML qui ressemble à ceci:

fichier XML

<users> 
<user> 
    <id>12345567</id> 
    <name>Ronsna Stedinberg</name> 
</user> 
<user> 
    <id>12345568</id> 
    <name>Sonsna Dtedinberg</name> 
</user> 
</users> 

et un fichier texte qui ressemble à ceci:

fichier texte

Ronsna John Stedinberg y 
Sonsna Dtedinberg

Je dois être capable de lire le fichier texte et changer le nom de balise dans le fichier XML informer de prenom, middlename (si any) et nom de base sur les données que j'ai dans le fichier texte, et aussi ajouter op="y" attribut si et seulement si "y" existe à la fin de toute ligne dans le fichier texte d'autre op="n".

La sortie devrait ressembler à ceci:

fichier de sortie

<users> 
<user> 
    <id>12345567</id> 
    <name> 
     <firstname op="y">Ronsna</firstname> 
     <middlename op="y">John</middlename> 
     <lastname op="y">Stedinberg</lastname> 
</name> 
</user> 
<user> 
    <id>12345568</id> 
    <name> 
     <firstname op="n">Sonsna</firstname> 
     <lastname op="n">Dtedinberg</lastname> 
    </name> 
</user> 
</users> 

je vraiment besoin d'aide?

Merci

+0

Pourriez-vous nous montrer ce que vous avez tenté jusqu'ici? Je vous suggère de regarder le module XML :: Twig Perl pour y arriver. –

+0

Je suis un débutant, je vais jeter un oeil à XML :: Twig et essayer de faire quelque chose, s'il vous plaît Bart J pouvez-vous me montrer votre chemin? – aliocee

+0

Pourquoi est-ce que vous ajoutez l'op = "" au prénom/nom? Pourquoi ne pas l'étiquette de nom? – Leolo

Répondre

0

Tout d'abord, une réponse plus générique à votre question générique: Pour ajouter des balises et attributs dans un fichier XML que vous ne voulez pas manipuler en fait le XML vous-même. C'est une répétition fragile, difficile et inutile. Au lieu de cela, vous voulez convertir le XML et tous les autres fichiers d'entrée que vous avez en structures de données Perl construites de variables de base Perl: scalaires, tableau, hachages.

Voici un bref aperçu de ce que vous pourriez faire:

Lire le fichier texte avec quelque chose comme File::Slurp dans un tableau. Divisez chaque ligne dans son propre tableau, puis créez un hachage anonyme pour chaque ligne. Si le dernier élément du tableau de lignes est y ou n, supprimez-le() et stockez-le comme clé de hachage "op". Ensuite, si le résultat est 3, ajoutez les valeurs par ordre dans le hashkeys firstname, middlename, lastname; ou si c'est 2, juste en prénom, nom de famille. Vous finissez avec un tableau de hachages, peut-être appeler cela @replacements.

Ensuite, chargez le fichier XML avec un analyseur comme XML::Simple qui génère une structure de données avec un tableau de hachages représentant vos utilisateurs. Pour chaque utilisateur, vous divisez le prénom et la clé de nom en leurs propres éléments. Ensuite, pour chaque utilisateur, vous parcourez chaque remplacement, en recherchant un où le prénom et le nom correspondent.

Si tel est le cas, reconstruisez la structure de données de noms avec les données du remplacement.

Ensuite, exécutez la structure entière à travers un écrivain XML et vous avez terminé.

Maintenant, quant à la mise en œuvre réelle de ce, c'est à vous de décider. Avec cela, vous avez une idée de la façon de le faire.Lorsque vous tombez sur de petits détails de mise en œuvre en cours de route, c'est à ce moment-là que vous cherchez ou que vous posez la question ici. Aussi, gardez à l'esprit que ce n'est pas une description exhaustive et je ne connais pas toutes les variables et les entrées, donc j'ai peut-être mal compris. Gardez votre esprit vif.

Bonne chance.

+0

Pourquoi utiliser deux modules quand un (XML :: Twig) suffirait? :) –

+0

Bart J, s'il vous plaît quelle est l'idée d'utiliser XML :: Twig? – aliocee

+0

Ahead: Je n'ai jamais utilisé XML :: Twig et je ne sais rien à ce sujet. Je suis confus ce que vous voulez dire avec deux modules cependant. Je ne suis pas sûr que XML :: Twig peut charger des données comme dans ce fichier texte, et XML :: Simple peut aussi écrire. (Disclaimer: Je sais que XML :: Simple n'est pas le meilleur, mais j'essaie d'éviter le XML quand je le peux et je ne sais pas ce qu'il y a de mieux.Par: OP a besoin de quelque chose de simple car ils ont du mal à formuler un algorithme de haut niveau en premier lieu.) – Mithaldu

Questions connexes