2013-04-13 9 views
0

Я хочу изменить значение xml-файла с помощью xmlstarlet (я знаю, как изменить строку с помощью grep или sed, но я хочу изучить xmlstarlet).Обновить значение атрибута с xmlstarlet

Я смотрел официальную документацию (http://xmlstar.sourceforge.net/doc/UG/xmlstarlet-ug.html), но я полный диспастер с структурой xml.

Я хочу, чтобы изменить значение здесь:

<ExtraDataItem name="GUI/UpdateDate" value=""/> 

Это команда, которую я пробовал, но вывод такой же, как входное значение:

xml edit --update "//ExtraDataItem[@name='GUI/UpdateDate']/@value" --value "never" virtualbox.xml 

И это XML-файл:

<?xml version="1.0"?> 
<!-- 
** DO NOT EDIT THIS FILE. 
** If you make changes to this file while any VirtualBox related application 
** is running, your changes will be overwritten later, without taking effect. 
** Use VBoxManage or the VirtualBox Manager GUI to make changes. 
--> 
<VirtualBox xmlns="http://www.innotek.de/VirtualBox-settings" version="1.12-windows"> 
    <Global> 
    <ExtraData> 
     <ExtraDataItem name="GUI/DetailsPageBoxes" value="general,system,preview,display,storage,audio,network,usb,sharedFolders,description"/> 
     <ExtraDataItem name="GUI/GroupDefinitions/" value="m=3fa2f128-b094-40c1-bec6-6580b0ac597a,m=65c3158a-330e-4456-b770-768dfecc788f"/> 
     <ExtraDataItem name="GUI/HostScreenSaverDisabled" value="false"/> 
     <ExtraDataItem name="GUI/Input/AutoCapture" value="true"/> 
     <ExtraDataItem name="GUI/Input/HostKeyCombination" value="163"/> 
     <ExtraDataItem name="GUI/LastItemSelected" value="m=Windows XP SP3 (x86)"/> 
     <ExtraDataItem name="GUI/LastWindowPosition" value="575,245,770,550"/> 
     <ExtraDataItem name="GUI/SplitterSizes" value="289,477"/> 
     <ExtraDataItem name="GUI/SuppressMessages" value=",remindAboutInaccessibleMedia,cannotAccessUSB"/> 
     <ExtraDataItem name="GUI/TrayIcon/Enabled" value="false"/> 
     <ExtraDataItem name="GUI/UpdateCheckCount" value="3"/> 
     <ExtraDataItem name="GUI/UpdateDate" value=""/> 
    </ExtraData> 
    <MachineRegistry> 
     <MachineEntry uuid="{65c3158a-330e-4456-b770-768dfecc788f}" src="C:\Users\Administrador\VirtualBox VMs\Windows 7 x64\Windows 7 x64.vbox"/> 
     <MachineEntry uuid="{3fa2f128-b094-40c1-bec6-6580b0ac597a}" src="C:\Users\Administrador\VirtualBox VMs\Windows XP SP3 (x86)\Windows XP SP3 (x86).vbox"/> 
    </MachineRegistry> 
    <MediaRegistry> 
     <HardDisks/> 
     <DVDImages/> 
     <FloppyImages/> 
    </MediaRegistry> 
    <NetserviceRegistry> 
     <DHCPServers> 
     <DHCPServer networkName="HostInterfaceNetworking-VirtualBox Host-Only Ethernet Adapter" IPAddress="192.168.56.100" networkMask="255.255.255.0" lowerIP="192.168.56.101" upperIP="192.168.56.254" enabled="1"/> 
     </DHCPServers> 
    </NetserviceRegistry> 
    <SystemProperties defaultMachineFolder="C:\Users\Administrador\VirtualBox VMs" defaultHardDiskFormat="VDI" VRDEAuthLibrary="VBoxAuth" webServiceAuthLibrary="VBoxAuth" LogHistoryCount="3"/> 
    <USBDeviceFilters/> 
    </Global> 
</VirtualBox> 
+0

Помогает ли [Пространства имен] (http://xmlstar.sourceforge.net/doc/UG/ch05s01.html)? – npostavs

+0

да! Я решил с вашей помощью, спасибо – ElektroStudios

ответ

1

решение было выбрать пространство имен:

xml ed -N N="http://www.innotek.de/VirtualBox-settings" --update "//N:ExtraDataItem[@name='GUI/UpdateDate']/@value" --value "never" virtualbox.xml 

 Смежные вопросы

  • Нет связанных вопросов^_^