用于在bash中更新xml的xpath表达式

时间:2016-02-14 00:51:54

标签: xml bash xmlstarlet

我编写了一个使用第三方软件的部署脚本。

它以XML格式安装文件.plist文件。

但是要运行该软件,我需要更新文件中的XML节点。

<plist>
  <dic>
    <key>dynamic_ipaddress</key>
    <array>
    </array>
  </dict>
</plist>

<key>dynamic_ipaddress</key>
<array>
      <string>127.0.5.1</string>
</array>

我试过

xmlstarlet ed -L -u "//plist/dict/[key='dynamic_ipaddress']/array/string" -v 'xxxxxx' file.xml

它不起作用。失败,表达式无效。

正确的xpath表达式是什么?

1 个答案:

答案 0 :(得分:3)

您实际上想要将xpath更新为&#34; array&#34;,添加子节点。我已经扩充了您的示例文件以演示:

$ cat file.xml
<plist>
  <dict>
    <key>dynamic_ipaddress</key>
    <array>
    </array>
  </dict>
  <dict>
    <key>something else</key>
    <array><number>42</number></array>
  </dict>
</plist>

$ xmlstarlet ed -s '/plist/dict[key="dynamic_ipaddress"]/array' -t elem -n string -v foo file.xml
<?xml version="1.0"?>
<plist>
  <dict>
    <key>dynamic_ipaddress</key>
    <array>
    <string>foo</string></array>
  </dict>
  <dict>
    <key>something else</key>
    <array>
      <number>42</number>
    </array>
  </dict>
</plist>