Помогите разобраться, нужно установить другие значения H и V для "TransportWindow"
Пример: file.xml
<Defaults>
<list name="Entries" type="list">
<item>
<string name="Group" value="zzzz"/>
<member name="Values">
<obj class="UPoint" name="Location" ID="215319288">
<int name="H" value="321"/>
<int name="V" value="690"/>
</obj>
</member>
</item>
<item>
<string name="Group" value="TransportWindow"/>
<member name="Values">
<obj class="UPoint" name="Location" ID="215319288">
<int name="H" value="321"/>
<int name="V" value="690"/>
</obj>
</member>
</item>
</list>
</Defaults>
По документации получается выполнить элементарное, но в моём случае не могу понять.
http://xmlstar.sourceforge.net/doc/UG/xmlstarlet-ug.html
Если есть варианты BAT/CMD тоже пишите, хотя xml.exe придуман именно для этих целей.
# xml ed -u "/Defaults/list/item/string[@value=TransportWindow]/member/obj/int[@name=H]" -v 777 file.xml
я думаю поля которые не значимые можно не указывать, например <list name="Entries" type="list"> ?
Foreigner
09-03-2013, 08:18
Цигвин ставить не стал.
На PowerShell:
$xml = new-object xml
$xml.load("C:\file.xml")
$xml.defaults.list.item[1].member.obj.int[0].value = '333'
$xml.defaults.list.item[1].member.obj.int[1].value = '555'
$xml.save("C:\file.xml")
Или так:
$xml = new-object xml
$xml.load("C:\file.xml")
$xml.defaults.list.item | % {
if ($_.string.value -eq "TransportWindow") {
$_.member.obj.int | % {
if ($_.name -eq 'H') { $_.value = '333' }
if ($_.name -eq 'V') { $_.value = '555' }
}
}
}
$xml.save("C:\file.xml")
Ох, PowerShell на XP не станет, сначала скажет установить Framework 3.5 которого по-умолчанию даже в Win8 нету, потом будет устанавливать 15 минут, а потом скажет ещё WIC установить, а потом скажет что платформа x64 не поддерживается.
Пришло время батники при помощи NET писать :(
Если кто сможет на cmd.exe языке cmd/bat напишите пожалуйста?
Foreigner
09-03-2013, 18:14
semiono,
Плох cmd для разбора текста вообще и xml в частности. Только для конкретного файла:
@echo off
setlocal
for /f "tokens=1,2 delims=:" %%i in ('findstr /n "." file.xml') do call:1 %%i "&%%j"
set "str_118=%str_118:321=333%"
set "str_119=%str_119:690=555%"
for /f "tokens=2 delims=&" %%i in ('set str_') do 1>>file.xml echo %%i
goto:eof
:1
set /a num=100+%1
set "str_%num%=%~2"
Ребята, работает! Тут конечно надо внимание и терпение с первого раза в XML, но инструмент работает!
xml ed -u "/Defaults/list/item[string[@value='TransportWindow']]/member/obj/int[@name='H']/@value" -v 100500 file.xml
Имя нельзя в двойные кавычки указывать "H", хотя цифры почему-то можно)
И с путями XPath тоже документация не очень, но разобрались.
xml.exe 2.10 MB :)
Foreigner, спасибо, пригодится!
Fasm + XMLStarlet
include '%fasm%/win64ax.inc'
section '.code' executable
start:
sub rsp,8
invoke SHGetSpecialFolderPath,NULL,b,CSIDL_APPDATA,NULL
invoke lstrcat,b,'\Steinberg\Nuendo 4'
invoke GetSystemMetrics,SM_CXSCREEN
invoke wsprintf,a,\
'/c xml ed -S -O -u "/Defaults/list/item[string[@value=''PArrangeWindow'']]/member/obj[@name=''Size'']/int[@name=''H'']/@value" -v %d Defaults.xml> tmp && move /y tmp Defaults.xml',eax
invoke ShellExecute,NULL,NULL,'cmd.exe',a,b,SW_HIDE
invoke GetSystemMetrics,SM_CYSCREEN
sub eax,52
invoke wsprintf,a,\
'/c xml ed -S -O -u "/Defaults/list/item[string[@value=''PArrangeWindow'']]/member/obj[@name=''Size'']/int[@name=''V'']/@value" -v %d Defaults.xml> tmp && move /y tmp Defaults.xml',eax
invoke ShellExecute,NULL,NULL,'cmd.exe',a,b,SW_HIDE
invoke GetSystemMetrics,SM_CXSCREEN
shr eax,1
sub eax,399
invoke wsprintf,a,\
'/c xml ed -S -O -u "/Defaults/list/item[string[@value=''TransportWindow'']]/member/obj/int[@name=''H'']/@value" -v %d Defaults.xml> tmp && move /y tmp Defaults.xml',eax
invoke ShellExecute,NULL,NULL,'cmd.exe',a,b,SW_HIDE
invoke GetSystemMetrics,SM_CYSCREEN
sub eax,220
invoke wsprintf,a,\
'/c xml ed -S -O -u "/Defaults/list/item[string[@value=''TransportWindow'']]/member/obj/int[@name=''V'']/@value" -v %d Defaults.xml> tmp && move /y tmp Defaults.xml && del tmp',eax
invoke ShellExecute,NULL,NULL,'cmd.exe',a,b,SW_HIDE
exit:
invoke ExitProcess,NULL
section '.data' readable writeable
a rb MAX_PATH
b rb MAX_PATH
section '.idata' import readable
library kernel32,'KERNEL32.DLL',shell32,'SHELL32.DLL',user32,'USER32.DLL'
include '%fasm%/api/kernel32.inc'
include '%fasm%/api/shell32.inc'
include '%fasm%/api/user32.inc'
Устанавливает размеры окна программы относительно разрешения экрана.
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.