在它们之间按值搜索XML标记并在shell脚本中插入新标记

时间:2012-03-15 18:45:16

标签: xml shell xsd xml-parsing xmlstarlet

假设我有这个包含这些内容的test.xml文件

<d>
  <p>
    <n>hi</n>
    <r>
      <s>1.0</s>
    </r>
  </p>

  <p>
    <n>hello</n>
    <r>
      <s>1.0</s>
    </r>
  </p>
</d>

我想添加一个新的&lt; s&gt; 2.0&lt; / s&gt;对于“hello”对象,如下所示。

<d>
  <p>
    <n>hi</n>
    <r>
      <s>1.0</s>
    </r>
  </p>

  <p>
    <n>hello</n>
    <r>
      <s>1.0</s>
      <s>2.0</s>
    </r>
  </p>
</d>

我必须使用shell脚本执行此操作。有一种方法可以搜索XML DOM并使用此处http://www.technomancy.org/xml/add-a-subnode-command-line-xmlstarlet/给出的xmlstarlet添加标签。但这仅描述了基于属性值向某些节点添加新标记。我没有任何属性。我该怎么做 ?有没有办法用grep做到这一点?

1 个答案:

答案 0 :(得分:3)

xmlstarlet ed -a '//p[n="hello"]/r/s' -t elem -n s -v 2.0 input.xml

说明:

  • ed ==&gt;修改
  • -a ==&gt;附加
  • -t ==&gt;输入
  • -n ==&gt;名称
  • -v ==&gt;值