我有一个装满XML文件的文件夹。我需要获取每个节点中相同节点的节点值,然后将此值作为列表写入单个文本文件。
换句话说,这些文件中的每一个都有一个节点。我需要一个文本文件中所有userid值的列表。
我不需要进程,因为这只会执行一次,所以我试图弄清楚我可以在文件夹上运行的shell脚本(我在OSX / Unix上)。
答案 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)
希望这有帮助