2010-11-28 11 views
2

可能性の重複:perlを使ってXMLファイルにタグと属性を追加するには?

XMLファイル

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

how to read a text file and use it to update XML tag with perl

こんにちは、

は、私はこのようなXML文書を持っています

とこのようになりますテキストファイル:

テキストファイル

私は、ファーストネームのmiddlenameを知らせるテキストファイルを読み込み、XMLファイルに名前タグを変更できるようにする必要があり
Ronsna John Stedinberg y 
Sonsna Dtedinberg

(もしテキストファイル内のデータの末尾に「y」がある場合にのみ、属性を追加します。

出力は次のようになります。

出力ファイル

<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> 

私は本当に助けが必要?

おかげ

+0

これまでに試したことをお聞かせください。これを行うには、XML :: Twig Perlモジュールを参照することをお勧めします。 –

+0

私は初心者です、私はXML :: Twigを見て、何かをしようとしてください、バートJしてくださいあなたは私の方法を表示できますか? – aliocee

+0

なぜあなたはfirstname/lastnameにop = ""を追加していますか?名前札に行かないのはなぜですか? – Leolo

答えて

0

まず第一に、あなたの非常に一般的な質問へのより一般的な答えは:タグを追加すると、あなたが実際にXMLを自分で操作したくないXMLファイルに属性。それは壊れやすい、困難で不必要な繰り返しです。その代わりに、XMLやその他の入力ファイルをPerlの基本変数で構築されたPerlデータ構造(スカラ、配列、ハッシュ)に変換したいとします。

ここでは大まかな概要は、あなたが何ができるかにあります:

アレイにFile::Slurpのようなものを持つテキストファイルを読み込みます。各行を独自の配列に分割し、各行に匿名ハッシュを作成します。行配列の最後の要素がyまたはnの場合は、pop()してハッシュキー "op"として保存します。結果が3の場合は、値をfirstname、middlename、lastnameという名前のハッシュキーで順番に追加します。またはそれが2の場合は、firstname、lastnameにちょうど入ります。

あなたはハッシュの配列になります。おそらく@replacementsを呼び出します。

次に、ユーザーを表すハッシュの配列を持つデータ構造を生成するXML::SimpleのようなパーサーでXMLファイルをロードします。ユーザーごとに、firstnameとlastnameのキーをそれぞれの要素に分割します。次に、それぞれのユーザーに対して、各置換を繰り返し、firstnameとlastnameが一致するものを探します。

もしそうであれば、名前データ構造体を置換えのデータで再構築します。

次に、XMLライターで構造全体を実行すると、完了です。

今、実際の実装については、あなた次第です。これであなたはそれをどうやって行うのか考えています。途中で細かい実装の詳細を見つけ出すと、それはあなたがGoogleやここで質問するときです。

また、これは包括的な説明ではなく、すべての変数と入力がわからないので、間違っている可能性があります。あなたの知恵を鋭く保つ。

幸運。

+0

1つ(XML :: Twig)で十分な場合は、2つのモジュールを使用するのはなぜですか? :) –

+0

Bart J、XML :: Twigを使う考えはどうですか? – aliocee

+0

先:私はXML :: Twigを使ったことは一度もなく、何も知らない。私はあなたが2つのモジュールを意味するのは混乱しています。私はXML :: Twigがプレーンテキストファイルのようなデータを読み込むことができないと確信しているし、XML :: Simpleも書き込みを行うことができます。 (免責事項:私はXML :: Simpleが最高ではないことを知っていますが、私はできる限りXMLを避けて、何が良いのか分からないようにしています。最初は。) – Mithaldu

関連する問題