2016-02-14 5 views
1

Я написал сценарий развертывания, который использует стороннее программное обеспечение.xpath выражение для обновления xml в bash

Он устанавливает файл .plist файла в формате XML.

Но для запуска программного обеспечения мне нужно обновить узел 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?

ответ

2

Вы действительно хотите обновить xpath до «array», добавив поднабор. Я добавил ваш пример файла для демонстрации:

$ 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>