powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Обработка данных XML
6 сообщений из 6, страница 1 из 1
Обработка данных XML
    #36723479
АнтонM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Подскажите, пожалуйста, возможно ли каким-либо образом ускорить работу следующего скрипта.

Назначение скрипта очень простое: он считывает данные из XML, отформатированного по правилам сохранения рабочей книги Excel в формате "Таблица XML" и записывает полученные строки в текстовый файл.

При работе с XML используется библиотека Microsoft.XMLDOM. Ниже текст самого скрипта, написанного на VBA:
Код: plaintext
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.
Public Sub XMLtoTXT(xmlFileName As String, _
                    txtFileName As String)
   Dim Fsys As Scripting.FileSystemObject, WT As Scripting.TextStream
   Dim xmlDoc As DOMDocument
   Dim objectNodeList As IXMLDOMNodeList
   Dim objectNode As IXMLDOMElement
   Dim propertyNode As IXMLDOMElement
   Dim StrLn As String

   Set Fsys = New Scripting.FileSystemObject
   Set WT = Fsys.OpenTextFile(txtFileName, ForWriting, True)

   Set xmlDoc = New DOMDocument 'создание DOMDocument объекта
   xmlDoc.Load xmlFileName 'загрузка XML-файла

   Set objectNodeList = xmlDoc.documentElement.selectNodes("Worksheet") 'выбор узла с рабочим листом "Worksheet"
   If objectNodeList.Length > 0 Then
      Set objectNode = objectNodeList.Item(0).childNodes(0) 'выбор дочернего узла "Table"
      Set objectNodeList = objectNode.selectNodes("Row") 'выбор дочернего узла "Row"
      For Each objectNode In objectNodeList 'извлечение данных каждого узла Row_i и запись их в файл
        StrLn = ""
        For Each propertyNode In objectNode.selectNodes("*")
           StrLn = StrLn & propertyNode.Text & vbTab
           Debug.Print objectNode.nodeName & "   " & propertyNode.nodeName
        Next
        WT.WriteLine Mid(StrLn,  1 , Len(StrLn) -  1 )
      Next
   End If
   Set Fsys = Nothing
   Set WT = Nothing
   Set xmlDoc = Nothing
   Set objectNodeList = Nothing
   Set objectNode = Nothing
   Set propertyNode = Nothing
End Sub

Скрипт работает корректно и возвращает требуемые данные с одним "НО": делает он это крайне медленно ! Файл, содержащий более 47000 записей, обрабатывает более 35 минут!

Возможно ли каким-либо образом ускорить работу скрипта? Может быть, необходимо использовать другую технологию или воспользоваться дополнительными методами DOMDocument?

Заранее большое спасибо за помощь!

P.S.
Обработкой XML я ранее не занимался, так что это своего рода "проба пера" для меня, строго не судите :). Во вложении пример XML-документа, который я обрабатываю скриптом.
...
Рейтинг: 0 / 0
Обработка данных XML
    #36723760
Andry Trushin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнтонM,

Даже не знаю, что и посоветовать...

DOM - штука медленная, DOM из Excel на VBA - сами видите, возьмите C# получите результат на порядок быстрее.

Как вариант, обрабатывать cvs файл - будет быстрее.

Как другой вариант использовать MSXML, ну соответственно написать XSL для обработки. Теоретически MSXML должен быть как-то доступен для VBA. Все же одна контора пишет.
...
Рейтинг: 0 / 0
Обработка данных XML
    #36724011
АнтонM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andry Trushin,

Спасибо за информацию!

Не подскажете, на каких ресурсах лучше всего поискать информацию об этом инструменте? Желательно, в разрезе его применимости в VBA. :)

Заранее спасибо!
...
Рейтинг: 0 / 0
Обработка данных XML
    #36724283
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SAX вас спасет. Скорость увеличится на порядки, с VB совместимость 100%
...
Рейтинг: 0 / 0
Обработка данных XML
    #36724287
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начинать читать отсюда
...
Рейтинг: 0 / 0
Обработка данных XML
    #36724426
АнтонM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,

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


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