Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] XMLStarlet Command Line XML Toolkit

Ответить
Настройки темы
Любой язык - [решено] XMLStarlet Command Line XML Toolkit

Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


Помогите разобраться, нужно установить другие значения 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/U...tarlet-ug.html

Если есть варианты BAT/CMD тоже пишите, хотя xml.exe придуман именно для этих целей.

-------
Полезное сообщение


Отправлено: 23:34, 08-03-2013

 

Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


# xml ed -u "/Defaults/list/item/string[@value=TransportWindow]/member/obj/int[@name=H]" -v 777 file.xml
я думаю поля которые не значимые можно не указывать, например <list name="Entries" type="list"> ?

-------
Полезное сообщение


Отправлено: 23:44, 08-03-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Цигвин ставить не стал.
На 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")

Последний раз редактировалось Foreigner, 09-03-2013 в 09:10.

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:18, 09-03-2013 | #3


Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


Ох, PowerShell на XP не станет, сначала скажет установить Framework 3.5 которого по-умолчанию даже в Win8 нету, потом будет устанавливать 15 минут, а потом скажет ещё WIC установить, а потом скажет что платформа x64 не поддерживается.
Пришло время батники при помощи NET писать

Если кто сможет на cmd.exe языке cmd/bat напишите пожалуйста?

-------
Полезное сообщение


Отправлено: 15:26, 09-03-2013 | #4


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


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"
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:14, 09-03-2013 | #5


Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


Ребята, работает! Тут конечно надо внимание и терпение с первого раза в 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, спасибо, пригодится!

-------
Полезное сообщение

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:43, 09-03-2013 | #6


Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


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'
Устанавливает размеры окна программы относительно разрешения экрана.

-------
Полезное сообщение

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:26, 10-03-2013 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] XMLStarlet Command Line XML Toolkit

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Вопрос - Avira AntiVir Command Line Scanner... petroq Защита компьютерных систем 0 03-07-2011 01:31
Службы - [решено] Прекращена работа программы"A Win32 command line eMail tool" KAV1984 Microsoft Windows 7 7 30-05-2011 20:21
Что такое "UI mode" и "-i command-line option"? Alexeyy Microsoft Windows 95/98/Me (архив) 7 26-08-2010 04:31
Command Line Gui Wrapper (Интерфейс любых любых dos/cmd программ) Stalingrad Автоматическая установка приложений 5 20-01-2009 16:02




 
Переход