从XML文件的文件夹中提取XML节点值?

时间:2011-08-04 15:15:33

标签: xml bash

我有一个装满XML文件的文件夹。我需要获取每个节点中相同节点的节点值,然后将此值作为列表写入单个文本文件。

换句话说,这些文件中的每一个都有一个节点。我需要一个文本文件中所有userid值的列表。

我不需要进程,因为这只会执行一次,所以我试图弄清楚我可以在文件夹上运行的shell脚本(我在OSX / Unix上)。

1 个答案:

答案 0 :(得分:1)

你可以使用perl,假设这些是你的文件

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

这是内容

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

使用这个简单的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

您可以获取userid节点的内容。

当然,您需要更改命令以适合您的xml结构。

请注意,如果您的计算机尚未安装XML :: Bare perl模块,则可能需要安装它。如果未修复xml的结构,则可以使用find_node函数http://metacpan.org/pod/XML::Bare。 (我安装了perl v5.10.1)

希望这有帮助