用于更新部分XML元素值的Bash脚本

时间:2017-01-02 13:28:35

标签: xml linux bash macos xmlstarlet

我需要一个bash脚本来根据其他动态属性更新部分XML元素值。

例如,XML文件:

<?xml version="1.0"  encoding="ISO-8859-1"?>
 <Configure class="org.eclipse.something">
   <Set name="foo">foo-val</Set>
   <Set name="bar">bar-val</Set>
   <Set name="my-elm">/dont/matter/THIS_ONE_NEED_TO_BE_UPDATED</Set>
 </Configure>

尝试将xmlstarlet与regexing一起使用,但它没有提供我想要的结果。 我正在使用OSX 10.12。

1 个答案:

答案 0 :(得分:1)

使用xmlstarlet以下xpath表达式对我来说很好。以下表达式执行-L文件的步调替换(XML标志)

xmlstarlet edit -L -u "/Configure/Set[@name='my-elm']" -v '/dont/matter/THIS_ONE_NEED_TO_BE_UPDATED' xml-file

删除-L标志以检查替换是否正确,并且一旦成功添加相同。

xmlstarlet (1.6.1)

上查看OS X

虽然建议严格 NOT 使用sed进行xml更新,但以下逻辑对您有用,

sed "s/\(<Set name=\"my-elm\".*>\)[^<>]*\(<\/Set.*\)/\1\/dont\/matter\/THIS_ONE_NEED_TO_BE_UPDATED\2/" xml-file

添加-i.bak以进行文件的就地替换。