Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / IXMLDOMDocumet.Save не записывает изменения / 14 сообщений из 14, страница 1 из 1
28.11.2014, 13:03
    #38819419
Max_Хацкер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IXMLDOMDocumet.Save не записывает изменения
Имеется процедура на 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
28.11.2014, 13:48
    #38819534
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IXMLDOMDocumet.Save не записывает изменения
Не видно причин, по которым бы не сохранялось.

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

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

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

Нет в свою папку, не стандартную для винды. Да и права админа у меня есть.... встроенного (Win 7).
...
Рейтинг: 0 / 0
02.12.2014, 14:35
    #38822617
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IXMLDOMDocumet.Save не записывает изменения
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
02.12.2014, 14:41
    #38822629
guest123456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IXMLDOMDocumet.Save не записывает изменения
Max_Хацкер,
У вас в скрипте "on error resume next" нет часом?
В переменной sFile вы точно уверены? WScript.Echo TypeName(sFile) и WScript.Echo sFile что говорят?
Файл может каким-нибудь софтом постоянно перезаписывается - дата модификации у файла не меняется?

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

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

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

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

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


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