xmlstarlet обновить атрибут - PullRequest
       23

xmlstarlet обновить атрибут

2 голосов
/ 20 октября 2011

Я работаю над сценарием, который работает с XML-файлом. Я хотел бы обновить значение атрибута в этом XML-файле с помощью xmlstarlet, но оно не работает.

Вот пример XML-файла:

<?xml version="1.0" encoding="UTF-8"?>
<channel name="xfce4-keyboard-shortcuts" version="1.0">
  <property name="commands" type="empty">
    <property name="default" type="empty">
      <property name="&lt;Alt&gt;F2" type="empty"/>
      <property name="&lt;Control&gt;&lt;Alt&gt;Delete" type="empty"/>
      <property name="XF86Display" type="string" value="xrandr --output LVDS --auto --output VGA-0 --mode 1680x1050_60.00 --right-of LVDS"/>
    </property>
    <property name="custom" type="empty">
      <property name="&lt;Alt&gt;F2" type="string" value="xfrun4"/>
      <property name="&lt;Control&gt;&lt;Alt&gt;Delete" type="string" value="xflock4"/>
      <property name="XF86Display" type="string" value="xrandr --output LVDS --auto --output VGA-0 --mode 1680x1050_60.00 --right-of LVDS"/>
      <property name="override" type="bool" value="true"/>
    </property>
  </property>
</channel>

А вот команда для обновления свойства с именем «XF86Display» в узле пользовательского свойства.

xmlstarlet edit \
  --update "/xml/channel[@name=xfce4-keyboard-shortcuts]/property[@name=commands]/property[@name=custom]/property[@name=XF86Display]/@value" \
  --value "test" xfce4-keyboard-shortcuts.xml

Этот вывод строго совпадает с входом ...

Спасибо

Ответы [ 2 ]

3 голосов
/ 20 октября 2011

Это работает для меня (корень <channel>; указаны значения атрибутов):

xmlstarlet edit \
  --update "/channel[@name='xfce4-keyboard-shortcuts']/property[@name='commands']/property[@name='custom']/property[@name='XF86Display']/@value" \
  --value  "test" xfce4-keyboard-shortcuts.xml

Или проще:

xmlstarlet edit \
  --update "//property[@name='XF86Display']/@value" \
  --value "test" xfce4-keyboard-shortcuts.xml
0 голосов
/ 12 апреля 2013

Правильно (обновлю настройки на лету)

xfconf-query -c xfce4-keyboard-shortcuts -p /commands/default/XF86Display -s 'test'
...