2011-08-04 19 views
0

私はXMLファイルでいっぱいのフォルダを持っています。私はそれぞれのノードのノード値を取得し、この値を単一のテキストファイルにリストとして書き込む必要があります。XMLファイルのフォルダからXMLノード値を抽出していますか?

つまり、これらのファイルにはいずれもノードがあります。 1つのテキストファイルにすべてのuserid値のリストが必要です。

これは一度だけ実行されるため、プロセスは必要ありません。そのため、ファイルのフォルダ(OSX/Unixにあります)で実行できるシェルスクリプトを見つけようとしていました。

+4

希望する出力の入力と書式の例が役に立ちます。 –

答えて

1

あなたは、このためのPerlを使用することができ、これらはあなたのファイル

$ ls xml/*.xml 
xml/1312537177.xml xml/1312537179.xml xml/1312537182.xml 

であり、これはコンテンツあなたが

$ for i in $(ls xml/*.xml); do cat $i | perl -M'XML::Bare' -e "local($/); print ((new XML::Bare(text => <STDIN>))->parse()->{'somenode'}{'userid'}{'value'});print \"\n\""; done; 
1312537177 
1312537179 
1312537182 

この単純なbashコマンドをすることができます使用して

$ cat xml/*.xml 
<?xml version="1.0" encoding="UTF-8" ?> 
<somenode><userid>1312537177</userid><otherstuff>fsadfadsf</otherstuff></somenode> 

<?xml version="1.0" encoding="UTF-8" ?> 
<somenode><userid>1312537179</userid><otherstuff>fsadfadsf</otherstuff></somenode> 

<?xml version="1.0" encoding="UTF-8" ?> 
<somenode><userid>1312537182</userid><otherstuff>fsadfadsf</otherstuff></somenode> 

であると言うことができますユーザーIDノードの内容を取得します。

もちろん、xml構造に合わせてコマンドを変更する必要があります。

ご使用のマシンにXML :: Bare perlモジュールがインストールされていない場合は、インストールする必要があります。 xmlの構造が固定されていない場合は、find_node関数http://metacpan.org/pod/XML::Bareを使用できます。 (私はperl v5.10.1がインストールされています)

希望します。

関連する問題