如何修改xml文件并添加内部节点?

时间:2014-12-31 14:50:20

标签: xml macos shell sh

我有这个xml文件:

<xml>
<segmentrecorddb>

...

</segmentrecorddb>
</xml>

我想写一个sh文件,它将添加一个内部xml节点

意味着文件将是:

   <xml>
    <segmentrecorddb>
    <myNoed>
    </myNoed>
    ...

    </segmentrecorddb>
   </xml>

如何删除前两行

添加2行并添加

              

EDIT1:

我试过了: ➜ Downloads sed "s/<xml><segmentrecorddb>/<xml><segmentrecorddb><myNode></myNode>/" menyHtml.html > menyHtml.html

得到了:

sed: 1: "s/<xml><segmentrecorddb ...": bad flag in substitute command: 'm'

EDIT2:

<xml>
<segmentrecorddb>

...

</segmentrecorddb>
</xml>

我跑了

sed 's/<segmentrecorddb>/<segmentrecorddb>\n<myNode><\/myNode>/' < menyHtml.html > menyHtml1.html

输入

得到了输出:

  <xml>
    <segmentrecorddb>n<myNode></myNode>

        ...

    </segmentrecorddb>
</xml>

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

Shell脚本是强有力地操纵XML的不良选择,因为UNIX可用的字符串处理实用程序往往是面向行的,而XML不是面向行的。

如果您生成的解决方案隐含地依赖于换行符存在的位置,例如,当有人更改输入XML的规范化方式时,您会发现解决方案可能会中断。

您可能还需要担心是否要更改 <segmentrecorddb>的每个实例或仅更改一个。

有些工具可以提供帮助,例如xml2pyxie。但是,如果您需要安装其他东西,为什么不安装能够正确处理XML的东西(例如Python)?

也就是说,以下sed命令将以最简单的方式执行修复:

sed 's/<segmentrecorddb>/<segmentrecorddb>\n<myNode><\/myNode>/' < input.xml > output.xml