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

Я работаю над скриптом, который работает с файлом 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

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

Спасибо


person renard    schedule 20.10.2011    source источник


Ответы (2)


Это работает для меня (корень <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
person mzjn    schedule 20.10.2011
comment
Привет, я использую это, чтобы автоматически изменить версию в ионном приложении, мне нужно изменить widget/@version, я использую xmlstarlet ed -u 'widget/@version' -v '1.0.10' config.xml, но результат не изменился - person Ernesto Alfonso; 14.07.2020
comment
@ErnestoAlfonso: пожалуйста, задайте новый вопрос. - person mzjn; 14.07.2020

Правильный способ (будет обновлять настройки на лету)

xfconf-query -c xfce4-keyboard-shortcuts -p /commands/default/XF86Display -s 'test'
person Teresa e Junior    schedule 12.04.2013