powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / IXMLDOMDocumet.Save не записывает изменения
14 сообщений из 14, страница 1 из 1
IXMLDOMDocumet.Save не записывает изменения
    #38819419
Max_Хацкер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется процедура на VBScript, где выполняется изменение некоторых атрибутов и сохранение документа.
Проблема в том, что физически данные НЕ записываются. После выполнения скрипта открываю XML файл в редакторе, но изменений там нет.
Проверял в отладчике. По переменным видно, что значения меняются как надо, но при вызове Save в файл изменения не записываются.

Помогите, если кто сталкивался?
Текст процедуры
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
Sub Fix(oFiles, sXQuery)
  Dim sFile, oXMLFile, oXMLNodes, oXMLNode, oXMLAttribs, oXMLAttrib
  If Len(sXQuery) > 0 Then
    Set oXMLFile = CreateObject("MSXML2.DOMDocument.6.0")
    For Each sFile in oFiles.Keys
      WScript.Echo "Loading XML file " & sFile
      If oXMLFile.Load(sFile) Then
        Set oXMLNodes = oXMLFile.selectNodes(sXQuery)
        If oXMlNodes.Length > 0 then
          WScript.Echo "Found " & oXMlNodes.Length & " items"
          For Each oXMLNode In oXMLNodes
            WScript.Echo oXMLNode.nodeName
            Set oXMLAttribs = oXMLNode.attributes
            If oXMLAttribs.length >0 then
              For Each oXMLAttrib in oXMLAttribs
                WScript.Echo oXMLAttrib.nodeName & " " & oXMLAttrib.nodeValue
                If oXMLAttrib.nodeName = "Value" Then
                  oXMLAttrib.nodeValue = "Yes"
                  WScript.Echo "Value changed to " & oXMLAttrib.nodeValue
                End IF
                If oXMLAttrib.nodeName = "ValueLocalizeID" Then
                  oXMLAttrib.nodeValue = "SYSRES_COMMON.YES_CONST"
                  WScript.Echo "Value changed to " & oXMLAttrib.nodeValue
                End IF
                WScript.Echo oXMLAttrib.nodeName & " " & oXMLAttrib.nodeValue
              Next
            End If
            Set oXMLAttribs = Nothing
          Next
          oXMLFile.Save(sFile)
        Else
          WScript.Echo "Nothing found!"
        End If
        Set oXMLNodes = Nothing
      End If
    Next
    Set oXMLFile = Nothing
  End If
End Sub


...
Рейтинг: 0 / 0
IXMLDOMDocumet.Save не записывает изменения
    #38819534
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не видно причин, по которым бы не сохранялось.

А если сохранить в другой файл?
...
Рейтинг: 0 / 0
IXMLDOMDocumet.Save не записывает изменения
    #38819610
Max_Хацкер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В другой файл записывает, но тоже без изменений.
...
Рейтинг: 0 / 0
IXMLDOMDocumet.Save не записывает изменения
    #38819700
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовать CreateObject("MSXML2.DOMDocument")?
...
Рейтинг: 0 / 0
IXMLDOMDocumet.Save не записывает изменения
    #38820977
Max_Хацкер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy,

Попробовал, не записывает. Даже Microsoft.XMLDOM попробовал, тоже не записывает.
...
Рейтинг: 0 / 0
IXMLDOMDocumet.Save не записывает изменения
    #38821426
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max_Хацкер,

Вы не в Program Files пишете?
...
Рейтинг: 0 / 0
IXMLDOMDocumet.Save не записывает изменения
    #38822183
Max_Хацкер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,

Нет в свою папку, не стандартную для винды. Да и права админа у меня есть.... встроенного (Win 7).
...
Рейтинг: 0 / 0
IXMLDOMDocumet.Save не записывает изменения
    #38822617
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max_Хацкер,

Дата модификации файла изменяется? Если нет, то Вы пишите не туда. Если изменяется, значит этот цикл
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
For Each oXMLAttrib in oXMLAttribs
                WScript.Echo oXMLAttrib.nodeName & " " & oXMLAttrib.nodeValue
                If oXMLAttrib.nodeName = "Value" Then
                  oXMLAttrib.nodeValue = "Yes"
                  WScript.Echo "Value changed to " & oXMLAttrib.nodeValue
                End IF
                If oXMLAttrib.nodeName = "ValueLocalizeID" Then
                  oXMLAttrib.nodeValue = "SYSRES_COMMON.YES_CONST"
                  WScript.Echo "Value changed to " & oXMLAttrib.nodeValue
                End IF
                WScript.Echo oXMLAttrib.nodeName & " " & oXMLAttrib.nodeValue
              Next


ничего не модифицирует. Т.е. либо нет атрибутов вообще, либо нет атрибутов с нужным именем, либо они уже имеют те значения, что Вы им присваиваете
...
Рейтинг: 0 / 0
IXMLDOMDocumet.Save не записывает изменения
    #38822629
guest123456
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Max_Хацкер,
У вас в скрипте "on error resume next" нет часом?
В переменной sFile вы точно уверены? WScript.Echo TypeName(sFile) и WScript.Echo sFile что говорят?
Файл может каким-нибудь софтом постоянно перезаписывается - дата модификации у файла не меняется?

Вообще, ИМХО, офф-топик.
...
Рейтинг: 0 / 0
IXMLDOMDocumet.Save не записывает изменения
    #38822665
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Дата модификации файла изменяется? Если нет, то Вы пишите не туда. Если изменяется, значит этот циклТС писал и в новый файл — файл создается, но данные в нем те же, что были загружены, изменения не сохраняются.
_Vasilisk_Т.е. либо нет атрибутов вообще, либо нет атрибутов с нужным именем, либо они уже имеют те значения, что Вы им присваиваетеВряд ли ТС настолько невнимателен...
...
Рейтинг: 0 / 0
IXMLDOMDocumet.Save не записывает изменения
    #38828951
Max_Хацкер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В том то и проблема, что когда я этот скрипт запустил в отладчике, то наблюдал, как атрибуты успешно нашлись и поменяли свои значения на те, что мне надо. Но после вызова Save в файле новых значений я не нашёл.
...
Рейтинг: 0 / 0
IXMLDOMDocumet.Save не записывает изменения
    #38828953
Max_Хацкер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, и проверочные сообщения чрез WScript.Echo успешно выводят новые значения атрибутов.
...
Рейтинг: 0 / 0
IXMLDOMDocumet.Save не записывает изменения
    #38828970
Max_Хацкер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest123456,

On Error Resume Next нету ни где и даже включено Option Explicit . Несколько раз перепроверил имена переменных в Notepad++ (он прикольно их подсвечивает во всём тексте).
...
Рейтинг: 0 / 0
IXMLDOMDocumet.Save не записывает изменения
    #38829772
Max_Хацкер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разобрался! Большое спасибо отладчику!

Посмотрел на обрабатываемые XMLNode и выяснил, что скрипт находит и исправляет совсем не те разделы где я проверяю результат! А не те разделы он исправляет из-за того, что я эти разделы ищу по числовому атрибуту ИД (предполагая, что ИД он и в Африке ИД и меняться не должен), а разрабы этот ИД меняют от версии к версии.

Вот зачем делать суррогатный числовой ключ в БД и нумеровать им записи таблицы, если его потом будут менять!

Всем огромное спасибо за участие и отзывчивость! :)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / IXMLDOMDocumet.Save не записывает изменения
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]