用另一个XML元素替换一个XML元素

时间:2010-08-19 09:35:16

标签: shell

我有兴趣找出一个可以编写的最短脚本来替换文件中的一个XML元素和另一个文件中的另一个XML元素。

我可以轻松地创建一个简单的程序,但我想知道它是否可以轻松地使用shell脚本。它只是一个实用工具,意味着方便。可以使用sed完成吗? awk?我不熟悉那些。我想我可以使用grepwc的组合来完成它,但似乎有更直接的方法来做到这一点。

基本上,我有一个大型配置文件,比如说config.xml,它看起来像这样:

<config>
    <element name="a">
        <subelement />
    </element>
    <element name="b">
        <subelement />
    </element>
    <element name="c">
        <subelement />
    </element>
    <!-- and so on... -->
</config>

偶尔,更改需要我修改/添加/删除一个subelement。现在,碰巧有一种生成最新subconfig.xml的生成器,如下面的文件:

<config>
    <element name="c">
        <subelement />
        <subelement />
    </element>
</config>

我的想法是,如果我可以在element中取subconfig.xml并替换config.xml中现有的{{1}},那么嘿,这太棒了!是的,它不是一个节省工作的人,因为它只是很少需要,但我刚想到我可以尝试用脚本来做,但我不确定如何。

任何帮助表示赞赏(包括指出我最好为此编写程序^ - ^)。

2 个答案:

答案 0 :(得分:1)

我不会尝试使用命令行工具执行此操作,您将遇到各种各样的困难。你应该这样做的方法是使用适当的XML解析器。逻辑是:使用原始文件,解析它,使用更新文件,解析它,识别这个人要替换的节点,进行替换,写出结果。

我不知道您对编码方面的满意度,但是大多数流行语言都提供了XML解析器。

答案 1 :(得分:1)

如果你的xml是一致的并且你的替换要求很简单,那么实际上不需要使用解析器。只需简单的awk即可

$ subconfig=(<subconfig.xml)
$ awk -v subconf=$subconfig '/<config>/{print subconf}/<config>/,/<\/config>/{next}1' config.xml