Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Чтение больших XML с использованием API SAX - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Чтение больших XML с использованием API SAX (Макросы/Sub)
Чтение больших XML с использованием API SAX
sgkorolew Дата: Понедельник, 01.04.2019, 18:22 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 106
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
Решил попробовать прочитать большой XML c использованием API SAX.
Пока не могу разобраться как перехватывать события SAX.
Может у кого-нибудь есть пример?
Или можно на моем файле потестить (файл прикрепил).
Данные из XML можно положить в массив или на лист Excel в качестве примера.
Начальный код:
[vba]
Код
Sub ЧтениеXML()
    Dim SAXReader As New SAXXMLReader60
    Dim файлXML

    файлXML = ThisWorkbook.Path & "\ТестовыйФайлXML.xml"
    SAXReader.parseURL файлXML
End Sub
[/vba]
К сообщению приложен файл: _XML.xlsm(14.4 Kb) · XML.xml(0.4 Kb)


Сообщение отредактировал sgkorolew - Понедельник, 01.04.2019, 18:33
 
Ответить
СообщениеДобрый день.
Решил попробовать прочитать большой XML c использованием API SAX.
Пока не могу разобраться как перехватывать события SAX.
Может у кого-нибудь есть пример?
Или можно на моем файле потестить (файл прикрепил).
Данные из XML можно положить в массив или на лист Excel в качестве примера.
Начальный код:
[vba]
Код
Sub ЧтениеXML()
    Dim SAXReader As New SAXXMLReader60
    Dim файлXML

    файлXML = ThisWorkbook.Path & "\ТестовыйФайлXML.xml"
    SAXReader.parseURL файлXML
End Sub
[/vba]

Автор - sgkorolew
Дата добавления - 01.04.2019 в 18:22
sgkorolew Дата: Суббота, 06.04.2019, 16:00 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 106
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день!
Пока, к сожалению, ни у кого не нашлось примеров кода. Добавляйте, пожалуйста.
Выкладываю, что получилось у меня.
К сообщению приложен файл: XML.xlsm(21.6 Kb)
 
Ответить
СообщениеДобрый день!
Пока, к сожалению, ни у кого не нашлось примеров кода. Добавляйте, пожалуйста.
Выкладываю, что получилось у меня.

Автор - sgkorolew
Дата добавления - 06.04.2019 в 16:00
igor2239 Дата: Вторник, 09.04.2019, 18:56 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 1 ±
Замечаний: 0% ±

Excel 2016
Обычно ещё добавляют модуль класса CSAXErrorHandler для обработки ошибок с таким содержанием

[vba]
Код
Implements IVBSAXErrorHandler

Private Sub IVBSAXErrorHandler_error(ByVal oLocator As MSXML2.IVBSAXLocator, strErrorMessage As String, ByVal nErrorCode As Long)
' PrintError oLocator, strErrorMessage, nErrorCode
End Sub

Private Sub IVBSAXErrorHandler_fatalError(ByVal oLocator As MSXML2.IVBSAXLocator, strErrorMessage As String, ByVal nErrorCode As Long)
' PrintError oLocator, strErrorMessage, nErrorCode
End Sub

Private Sub IVBSAXErrorHandler_ignorableWarning(ByVal oLocator As MSXML2.IVBSAXLocator, strErrorMessage As String, ByVal nErrorCode As Long)
' PrintError oLocator, strErrorMessage, nErrorCode
End Sub

Private Sub PrintError(oLoc As MSXML2.IVBSAXLocator, sMsg, lCode)
'MsgBox "** Oops! " & "SAX raised an error: " & lCode & ", " _
'& sMsg & " at line " & oLoc.lineNumber & ", column " & oLoc.columnNumber
Application.Cursor = xlNormal
End Sub
[/vba]


Сообщение отредактировал igor2239 - Вторник, 09.04.2019, 19:08
 
Ответить
СообщениеОбычно ещё добавляют модуль класса CSAXErrorHandler для обработки ошибок с таким содержанием

[vba]
Код
Implements IVBSAXErrorHandler

Private Sub IVBSAXErrorHandler_error(ByVal oLocator As MSXML2.IVBSAXLocator, strErrorMessage As String, ByVal nErrorCode As Long)
' PrintError oLocator, strErrorMessage, nErrorCode
End Sub

Private Sub IVBSAXErrorHandler_fatalError(ByVal oLocator As MSXML2.IVBSAXLocator, strErrorMessage As String, ByVal nErrorCode As Long)
' PrintError oLocator, strErrorMessage, nErrorCode
End Sub

Private Sub IVBSAXErrorHandler_ignorableWarning(ByVal oLocator As MSXML2.IVBSAXLocator, strErrorMessage As String, ByVal nErrorCode As Long)
' PrintError oLocator, strErrorMessage, nErrorCode
End Sub

Private Sub PrintError(oLoc As MSXML2.IVBSAXLocator, sMsg, lCode)
'MsgBox "** Oops! " & "SAX raised an error: " & lCode & ", " _
'& sMsg & " at line " & oLoc.lineNumber & ", column " & oLoc.columnNumber
Application.Cursor = xlNormal
End Sub
[/vba]

Автор - igor2239
Дата добавления - 09.04.2019 в 18:56
igor2239 Дата: Вторник, 09.04.2019, 19:07 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 1 ±
Замечаний: 0% ±

Excel 2016
Ещё полезная штука, если ищете в файле что-то конкретное и не нужно проходить до конца файла, когда это что-то нашли, то в Sub IVBSAXContentHandler_startDocument добавляете
[vba]
Код
mStopParsing = False
[/vba]

В самое начало Sub IVBSAXContentHandler_startElement добавляете
[vba]
Код
If mStopParsing Then Exit Sub
[/vba]

И там, где ожидаете найти то, что искали добавляете
[vba]
Код
mStopParsing = True
[/vba]

Этот способ всего лишь отключает парсинг, но не прекращает считывание файла. Наверняка есть какой-то более эффективный способ остановить работу процедуры, но я его не нашёл.


Сообщение отредактировал igor2239 - Вторник, 09.04.2019, 19:09
 
Ответить
СообщениеЕщё полезная штука, если ищете в файле что-то конкретное и не нужно проходить до конца файла, когда это что-то нашли, то в Sub IVBSAXContentHandler_startDocument добавляете
[vba]
Код
mStopParsing = False
[/vba]

В самое начало Sub IVBSAXContentHandler_startElement добавляете
[vba]
Код
If mStopParsing Then Exit Sub
[/vba]

И там, где ожидаете найти то, что искали добавляете
[vba]
Код
mStopParsing = True
[/vba]

Этот способ всего лишь отключает парсинг, но не прекращает считывание файла. Наверняка есть какой-то более эффективный способ остановить работу процедуры, но я его не нашёл.

Автор - igor2239
Дата добавления - 09.04.2019 в 19:07
sgkorolew Дата: Четверг, 11.04.2019, 19:01 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 106
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
igor2239, спасибо за дополнения.
 
Ответить
Сообщениеigor2239, спасибо за дополнения.

Автор - sgkorolew
Дата добавления - 11.04.2019 в 19:01
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Чтение больших XML с использованием API SAX (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2019 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!