通过 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 有太大的了解。请阅读一些内容。)
我需要通过 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 有太大的了解。请阅读一些内容。)