根据树中另一个元素的值更改XML元素的值

  • 本文关键字:元素 XML 另一个 xml xmlstarlet
  • 更新时间 :
  • 英文 :


我有一个非常大(100+兆字节未压缩)的XML文件存储数据集,我试图有选择地改变一些值。

例如,假设sample.xml看起来像这样:

<objects>
  <object>
    <name>Foo</name>
    <constant1>10</constant1>
    <constant2>20</constant2>
  </object>
  <object>
    <name>Bar</name>
    <constant1>15</constant1>
    <constant2>40</constant2>
  </object>
<objects>

现在我想将<constant1>的值更改为18,但是仅针对Name元素值为Foo的对象。我一直在查阅XML Starlet文档,但它那篇关于编辑的文章中只有关于如何直接在树中查找元素属性的示例,除非我遗漏了什么……

…显然我是个白痴;正如这个答案所示,您可以像搜索属性值一样搜索元素值,因此正确的命令应该是:

xmlstarlet ed -u '//object[name="Foo"]/const1' -v 18 sample.xml

…另外,在处理非常大的文件时要注意:没有输出重定向,xmlstarlet将打印到标准输出。所有100多兆字节的xml。哎呀。

相关内容

  • 没有找到相关文章

最新更新