我编写了一个使用第三方软件的部署脚本。
它以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表达式是什么?
答案 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>