通过 bash 更新 xml 文件中的特定值

Update specific value in xml file by bash

我需要通过 bash 脚本自动更新 xml 中的特定值。 我的 xml 文件有很多类似的行,例如:

<xml>
   <main>
      <buildElement name="test_one" version="" path="" />
      <buildElement name="test_two" version="" path="" />
   </main>
</xml>

我需要找到元素名称“test_one”并编辑版本。 我正在尝试这个,但没有帮助:

预期输出:

<xml>
   <main>
      <buildElement name="test_one" version="some_value" path="" />
      <buildElement name="test_two" version="" path="" />
   </main>
</xml>

我正在尝试通过 xmlstarlet 和 sed 获取此信息,但无法正常工作 f.e:

xmlstarlet edit --update '//xml/main/buildElement/name="test_one"/version' --value 'some_value' myXML.xml

您的 xpath 语法不正确。您需要使用 @ 来引用属性,并且要搜索您需要过滤器表达式的特定元素。你想要:

xmlstarlet edit --update \
  '//xml/main/buildElement[@name="test_one"]/@version' \
  -v some_value myXML.xml

将输出:

<?xml version="1.0"?>
<xml>
  <main>
    <buildElement name="test_one" version="some_value" path=""/>
    <buildElement name="test_two" version="" path=""/>
  </main>
</xml>
'//xml/main/buildElement/name="test_one"/version'

你想要

'//xml/main/buildElement[@name="test_one"]/@version'

(基本上,您似乎在猜测,这不会让您对 XPath 有太大的了解。请阅读一些内容。)