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

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

Назначение скрипта очень простое: он считывает данные из 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
05.07.2010, 16:31
    #36723760
Andry Trushin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка данных XML
АнтонM,

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

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

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

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

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

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

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

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


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