1

Тема: VBS: Изменение значения переменной в XML файле

Добрый день уважаемым скриптерам.
Необходимо в цикле  с помощью командной строки запускать .exe файл который обрабатывает  .XML файл содержащий некоторое значение. Если с запуском командной строки я разобрался, то вот про изменение значений переменных в XML как то застрял. Подскажите на примере, если это возможно, как изменить значение переменной в XML файле.

Привожу фрагмент XML файла. Переменная, которая должна меняться "name". С каждым проходом цикла цифра должна увеличиваться на единицу. (т.е. perem0, perem1 ..... peremN)

......
<commands>
<command name="Create" table="Prompt">
    <category>New</category>
    <description>perem0</description>
    <name>perem0</name>
</command>
</commands>  
........

2

Re: VBS: Изменение значения переменной в XML файле

admSpiker, для работы с XML как с XML нужно точно знать его структуру, а лучше увидеть целиком.

3

Re: VBS: Изменение значения переменной в XML файле

собственно говоря это и есть вся структура файла. далее и идет представление звукового файла в бинарном виде.

<commands>
<command name="Create" table="Prompt">
    <category>New</category>
    <description>audio0</description>
    <name>audio0</name>
</command>
</commands>RIFF–Ы/ WAVEfmt      @  Ђ>    datajЫ/                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 яяъяфяоялялямямялямянянямялямянямякямялямяоянялялялямялянялянянямялялямяняоямямянямямямяняняоянянянямялялямямянянямямянямямямямялямянянямямямямянялямянянялялямямялялямялялялямякялялямямямяляоянялялякялянямямямямялянямянямянямямянянямялямямялялянямякянямянялялялянямямялялянянямямямямямялялямялялялякяляляляляняоямямянялямямянянямялянямялялямямянямянямямямялянямялямямямямямямямямялямямямямялянямямямямянялямямяляоянямямямямянялялялялякямямямянянялямянянянямянянянямямянямянялямялялялямялямянянямянямянялямялямямянялямямялянянялялямянялялямянямянянякянямямянянянянямялямямянялянянямяоямянянямянянялямянялямямялянямямямямямякялямялянялялянямямямялянялямямялянякянянямялялялямямянямямямямямялянямямянякянянямямялянянялянялялянялянямянямямямямямямямякянялякялянялянялянялямямямякянямякямялянямямялялямямякялялянямялямямялямямялянянянялянямянямянямялямямянянянямянянямянямямялялямянянялямянянямямялянямямянямямямямялямямякялямяляоянямялямялямямянялямянялямяняляоянялялямялямямякяоямялялянямяля    юя  юя  юяэя     яя            яя  ьяюяяяяяюяюяяя          юя     яя ьяъя яя             юя  юяяя    юя  юяья       юяюяэяюя  юя  юя                    юя      юяюяюяья юя            юяюя                          яя           юя ьяюяэяья  юя    ьяюяюя    юя юя  ьяъя  юя  юяяяюя яя            юя  юяюя        яя  юя     юяюя      юя               яя        ыяья            ьяяяья       ьяэяюяья      юяья    юяюя              юяюя     яя      юя эяюяяяья  яя  эя          юяья      юя  юяюяяяяя   юяюяьяыя юя   ья  юя     юяяя          юя      юя  юя  юя  юя      юя  юя  эяюяюя           яя    яя           ьяяяьяюяюяья  юяюяюяюя         яя     юя         яя             юяяяюя       юя  яяюяюяяя       юяюяяяюя ьяья           ьяюя    яя          юяяя  юя  яя яя  яя       юяюя  юя юяюяья     яя  юяэя    юя      яяяяюяяя      яя  яя  ьяья  юяюяюя  юяюя           юя  юяюяюяюя  яя          яя  юя  юяюяюяья юя яя  яя    юяюя       юяэя  яя          эяюя  юя яя       юяяяюя       ьяюяюя    юя        яяюя      эяюяюяюяюяэя  юя          юя  юяюяяяэя      юяюяюяюя  яяюяюя             яя     эяья  юя

и так далее еще долго долго.

4

Re: VBS: Изменение значения переменной в XML файле

108 просмотров и ни одного ответа. Видимо вопрос решить нельзя подобным образом. Может быть тогда как то в строку преобразовать XML документ?

5 (изменено: dab00, 2011-09-08 11:12:23)

Re: VBS: Изменение значения переменной в XML файле

Если "это и есть вся структура файла", то как-то так:
Файл XML:

<commands>
    <command name="Create" table="Prompt">
        <category>New</category>
        <description>perem0</description>
        <name>perem0</name>
    </command>
</commands>

Код VBScript:

Const docName = "q.xml" 'имя вашего файла xml
Const strVarName = "perem" 'имя вашей переменной без счетчика

Set xmlDoc = CreateObject("Microsoft.XMLDOM") 'берем парсер
If xmlDoc.Load(docName) Then 'если документ загрузился без ошибок
    'выбираем именованный узел
    Set objNode = xmlDoc.documentElement.selectSingleNode("command/name")
    'покажем стартовое значение переменной
    MsgBox "Стартовое значение: " & objNode.text ' & vbTab & Left(objNode.text,Len(strVarName))    
    For i = 1 To 3
        objNode.text = Left(objNode.text,Len(strVarName)) & i
        xmlDoc.Save(docName) 'сохраняем        
        MsgBox "Значение после итерации " & i & ": " & objNode.text
    Next    
Else
    MsgBox "Ошибка загрузки документа"
End If

Если файл XML типа:

<commands>
    <command name="Create" table="Prompt">
        <category>New</category>
        <description>perem0</description>
        <name>perem3</name>
    </command>
    <command name="Create1" table="Prompt">
        <category>New</category>
        <description>perem0</description>
        <name>perem3</name>
    </command>
    <command name="Create2" table="Prompt">
        <category>New</category>
        <description>perem0</description>
        <name>perem3</name>
    </command>
    ... и.т.д.
</commands>

Тогда вот так:

Const docName = "q2.xml" 'имя вашего файла xml
Const strVarName = "perem" 'имя вашей переменной без счетчика

Set xmlDoc = CreateObject("Microsoft.XMLDOM") 'берем парсер
If xmlDoc.Load(docName) Then 'если документ загрузился без ошибок
    'берем все узлы    
    Set colNodes = xmlDoc.selectNodes("//name")     
    For Each objNode In colNodes    
        'покажем стартовое значение переменной
        MsgBox "Стартовое значение: " & objNode.text ' & vbTab & Left(objNode.text,Len(strVarName))    
        For i = 1 To 3
            objNode.text = Left(objNode.text,Len(strVarName)) & i
            xmlDoc.Save(docName) 'сохраняем            
            MsgBox "Значение после итерации " & i & ": " & objNode.text
        Next    
    Next
Else
    MsgBox "Ошибка загрузки документа"
End If

Подойдет?

6 (изменено: Аскет, 2011-09-08 10:49:26)

Re: VBS: Изменение значения переменной в XML файле

Можно и парсить "вручную", но не думаю что это хорошая идея. Затратно.

Действуй примерно так:
1) получаешь доступ к схеме документа через XML DOM DOCUMENT (msxml*.dll);
2) спускаясь вниз по древу обрабатывай дочерние теги (в которых хранится значение) для всех узлов "command".

p.s. впервые заглянул сюда

з.p.s. пока писал уже и скрипт нарисовали

7

Re: VBS: Изменение значения переменной в XML файле

Хм. Не задумался над такой реализацией. Модно. РЕспект пишущим.