2011-08-04 90 views
0

我有一個文件夾充滿了XML文件。我需要獲取每個節點中相同節點的節點值,然後將該值作爲列表寫入單個文本文件。從XML文件的文件夾中提取XML節點值?

換句話說,這些文件中的每個人都有一個節點。我需要一個文本文件中所有userid值的列表。

我並不需要一個過程,因爲這將只能做一次,所以我試圖找出一個shell腳本我的文件夾(我在OSX/Unix下)上運行。

+4

所需輸出的輸入和格式的示例將有所幫助。 –

回答

1

您可以使用Perl對於這一點,可以說這些都是你的文件

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

,這是使用這個簡單的bash命令

$ 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 

您可以從內容

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

獲取用戶標識節點的內容。

當然你需要更改命令以適應您的XML結構。

注意,如果它不是已經安裝在你的機器,你可能需要安裝XML ::裸Perl模塊,。如果你的xml的結構不固定,你可以使用find_node函數http://metacpan.org/pod/XML::Bare。 (我已經安裝了perl v5.10.1)

希望這會有所幫助