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

根据树中另一个元素的值更改XML元素的值,xml,xmlstarlet,Xml,Xmlstarlet,我有一个非常大(100兆未压缩)的XML文件存储数据集,我试图有选择地更改一些值 例如,假设sample.xml如下所示: <objects> <object> <name>Foo</name> <constant1>10</constant1> <constant2>20</constant2> </object> <object>

我有一个非常大(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>

福
10
20
酒吧
15
40
现在,我想将
的值更改为18,但是仅适用于
名称
元素具有值
Foo
的对象。
我一直在翻XML Starlet文档,但它只有一些示例,说明如何直接在树中查找元素的属性,除非我遗漏了什么…

。。。显然我是个白痴;如中所示,可以使用与搜索属性值相同的方法搜索元素值,因此正确的命令为:

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


。。。另外,在处理非常大的文件时要注意:如果没有输出重定向,
xmlstarlet
将打印到stdout。所有100兆以上的xml。哎呀。

感谢您的简要跟进。