【问题标题】:how to modify an xml file and add an inner node?如何修改xml文件并添加内部节点?
【发布时间】:2015-02-27 15:13:24
【问题描述】:

我有这个 xml 文件:

<xml>
<segmentrecorddb>

...

</segmentrecorddb>
</xml>

我想写一个 sh 文件来添加一个内部 xml 节点

表示文件将是:

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

    </segmentrecorddb>
   </xml>

如何删除前两行

添加2行并添加

编辑1:

我尝试过: ➜ Downloads sed "s/&lt;xml&gt;&lt;segmentrecorddb&gt;/&lt;xml&gt;&lt;segmentrecorddb&gt;&lt;myNode&gt;&lt;/myNode&gt;/" menyHtml.html &gt; menyHtml.html

得到:

sed: 1: "s/&lt;xml&gt;&lt;segmentrecorddb ...": bad flag in substitute command: 'm'

编辑2:

<xml>
<segmentrecorddb>

...

</segmentrecorddb>
</xml>

我跑了

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

输入

得到输出:

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

        ...

    </segmentrecorddb>
</xml>

我该如何解决这个问题?

【问题讨论】:

  • 您可以使用sed 命令来编辑流...所以,现在您只需要打开一个流并扫描到某个点即可。也许使用grep
  • 我会检查的。你能写出你想到的语法吗?
  • 您需要按照下面我的回答转义 / 前面的 myNode。
  • 另外,你不应该这样做&gt; mnyHtml.html,因为这会在输入文件被读取之前覆盖它。您需要使用不同的文件名。

标签: xml macos shell sh


【解决方案1】:

Shell 脚本对于稳健地操作 XML 来说是一个糟糕的选择,因为可用于 UNIX 的字符串处理实用程序往往是面向行的,而 XML 不是面向行的。

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

您可能还需要担心是要更改&lt;segmentrecorddb&gt;每个 实例还是只更改一个。

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

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

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

【讨论】:

  • 你试过我的代码了吗?我这样做了,使用您的输入,它有效,我还运行了您发布的代码,它也有效。您是否可能已经覆盖并截断了 menyHtml.html 文件?
  • 对这样的事情使用不同的模式分隔符而不是/ 会更容易。 (例如s,&lt;foo&gt;,&lt;/bar&gt;,
  • @spookylukey 你是对的。我只想更改第一个实例。我依赖&lt;xml&gt;\n&lt;segmentrecorddb&gt;
  • @spookylukey 你会怎么用 Python 做呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多