On-line: tnsr2, гостей 0. Всего: 1 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 84
Зарегистрирован: 06.02.07
ссылка на сообщение  Отправлено: 27.03.09 11:13. Заголовок: чтение из бооольшого XML


Вот понадобилось читать из XML и данные писать в базу (в общем, неважно, что делать: главное - прочитать из XML нечто).

Вроде бы проблем быть не должно (раньше дела не имел; глянул в XMLDEMO - все как бы просто) - но XML шибко длинный (данные по рецептам; формируется "чужой" программой; сейчас имеем 23Мб, а может быть и до 100 и до бог его знает сколько - нарастающей кучей)...

И тут получается, что "обычный" путь типа
 
#include "minigui.ch"
#include "i_xml.ch"

....

// основа - из Advanced \ XMLDEMO (поменял на Public)
Public oXmlDoc, oXmlNode, cFile

cFile := "03170003_0_PHARMACY_REESTR_MAPLGT.xml"
cFile := CurDrive() + ':\' + Curdir() + '\' + cFile

oXmlDoc := HXMLDoc():Read( cFile )

// для теста ищем <TITLE>...</TITLE> - он точно есть
oXMLNode := oXMLDoc:Find("TITLE") // тэг в самом начале XML (заголовок)

// если нашли - должен быть "O"
MsgInfo( 'ValType(oXMLNode)="' + ValType(oXMLNode) + '"' )

приводит сначала к бооольшой паузе (30-40 сек; видимо, читает XML-файл в Read()), а затем выдает ValType() как "U" (т.е. не обнаружил его) (если урезаю XML до 20-30 Кб - находит; т.е. получается как с ограничением длины строки - не длиннее 64 Кб).

Компилировал (Win98 SE; HMG 1.6.63) как:
call c:\MiniGUI\batch\compile.bat Demo /l hbxml

(аналогично SAMPLES\Advanced\XMLDEMO).

И как быть? Кто поделится опытом борьбы с XML-ками "особо больших" размеров (особенно чтения из них)?

Пока что есть только мысль - читать (как обычно из файла прямого доступа) постепенно через буфер (FRead()), там вылавливать через at() начало и конец нода, а уж потом разгребать его... Чё-т как-т... :/

В Applications\MODEST применяется другая библиотека для работы с XML (xhb) - дает аналогичный результат (заменив Find() на FindFirst() и заменив HXMLDoc() на XMLDocument()).

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 6 [только новые]


постоянный участник


Пост N: 624
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 27.03.09 11:47. Заголовок: Попробуйте использов..


Попробуйте использовать MSXML4 (а лучше MSXML6)
Загрузите и установите с сайта MS последнюю версию MSXML (около 1,5 Mb), MSXML_SDK ( 4 Mb, документацию читать же нужно ).

Маленький пример
 
/**
*/
#include "common.ch"

PROCEDURE main()
LOCAL xmlDoc, nodeBook, nodeId
//
xmlDoc := CreateObject( "Msxml2.DOMDocument.4.0" )
xmlDoc:async := FALSE
xmlDoc:load( XML_PATH + "catalog.xml" )

nodeBook := xmlDoc:selectSingleNode("//book")
nodeId := nodeBook:attributes:getNamedItem( "id" )

MsgInfo( nodeId:value )
//
RETURN


catalog.xml
 
<?xml version="1.0"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
<description>A former architect battles corporate zombies,
an evil sorceress, and her own childhood to become queen
of the world.</description>
</book>
<book id="bk103">
<author>Corets, Eva</author>
<title>Maeve Ascendant</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-11-17</publish_date>
<description>After the collapse of a nanotechnology
society in England, the young survivors lay the
foundation for a new society.</description>
</book>
<book id="bk104">
<author>Corets, Eva</author>
<title>Oberon's Legacy</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2001-03-10</publish_date>
<description>In post-apocalypse England, the mysterious
agent known only as Oberon helps to create a new life
for the inhabitants of London. Sequel to Maeve
Ascendant.</description>
</book>
<book id="bk105">
<author>Corets, Eva</author>
<title>The Sundered Grail</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2001-09-10</publish_date>
<description>The two daughters of Maeve, half-sisters,
battle one another for control of England. Sequel to
Oberon's Legacy.</description>
</book>
<book id="bk106">
<author>Randall, Cynthia</author>
<title>Lover Birds</title>
<genre>Romance</genre>
<price>4.95</price>
<publish_date>2000-09-02</publish_date>
<description>When Carla meets Paul at an ornithology
conference, tempers fly as feathers get ruffled.</description>
</book>
<book id="bk107">
<author>Thurman, Paula</author>
<title>Splish Splash</title>
<genre>Romance</genre>
<price>4.95</price>
<publish_date>2000-11-02</publish_date>
<description>A deep sea diver finds true love twenty
thousand leagues beneath the sea.</description>
</book>
<book id="bk108">
<author>Knorr, Stefan</author>
<title>Creepy Crawlies</title>
<genre>Horror</genre>
<price>4.95</price>
<publish_date>2000-12-06</publish_date>
<description>An anthology of horror stories about roaches,
centipedes, scorpions and other insects.</description>
</book>
<book id="bk109">
<author>Kress, Peter</author>
<title>Paradox Lost</title>
<genre>Science Fiction</genre>
<price>6.95</price>
<publish_date>2000-11-02</publish_date>
<description>After an inadvertant trip through a Heisenberg
Uncertainty Device, James Salway discovers the problems
of being quantum.</description>
</book>
<book id="bk110">
<author>O'Brien, Tim</author>
<title>Microsoft .NET: The Programming Bible</title>
<genre>Computer</genre>
<price>36.95</price>
<publish_date>2000-12-09</publish_date>
<description>Microsoft's .NET initiative is explored in
detail in this deep programmer's reference.</description>
</book>
<book id="bk111">
<author>O'Brien, Tim</author>
<title>MSXML3: A Comprehensive Guide</title>
<genre>Computer</genre>
<price>36.95</price>
<publish_date>2000-12-01</publish_date>
<description>The Microsoft MSXML3 parser is covered in
detail, with attention to XML DOM interfaces, XSLT processing,
SAX and more.</description>
</book>
<book id="bk112">
<author>Galos, Mike</author>
<title>Visual Studio 7: A Comprehensive Guide</title>
<genre>Computer</genre>
<price>49.95</price>
<publish_date>2001-04-16</publish_date>
<description>Microsoft Visual Studio 7 is explored in depth,
looking at how Visual Basic, Visual C++, C#, and ASP+ are
integrated into a comprehensive development
environment.</description>
</book>
</catalog>


еще один пример
  
/**
*/
#include "common.ch"

PROCEDURE main()
LOCAL xmlDoc, objNodeList, i, cAuth := ""
//
xmlDoc := CreateObject( "Msxml2.DOMDocument.4.0" )
xmlDoc:async := FALSE
xmlDoc:load( XML_PATH + "catalog.xml" )

objNodeList := xmlDoc:getElementsByTagName( "author" )

FOR i := 0 TO objNodeList:length - 1
cAuth += objNodeList:item(i):text
cAuth += hb_osNewLine()
NEXT

MsgInfo( cAuth )
//
RETURN


Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Пост N: 85
Зарегистрирован: 06.02.07
ссылка на сообщение  Отправлено: 27.03.09 12:59. Заголовок: Спасибо, Петр! Загру..


Спасибо, Петр! Загружу, буду просвещаться :)

Т.е. (как я понял) при использовании MSXML (кстати, у "клиента" - кто будет программу использовать - тоже должно быть установлено? или только у разработчика [у меня]?) нет проблемы с загрузкой "большого" XML-файла по
xmlDoc:load( XML_PATH + "catalog.xml" )

Я правильно понял?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 625
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 27.03.09 14:16. Заголовок: Да, MSXML должен быт..


Да, MSXML должен быть установлен и у пользователя (не SDK конечно). Де факто на Win2000 и выше он и так установлен. Только все равно MS рекомендует установить последнюю версию. И самому спокойнее будет :).
В принципе проблем быть не должно. К тому же MSXML имеет столько возможностей, честно и сам в деталях не разобрался, что и зачем, но довольно удобно в пользовании. Правда только для Win. Если нужна кросплатформенность - изучайте libxml2, пишите функции-обертки для Harbour. Тоже мощная штука.

Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Пост N: 86
Зарегистрирован: 06.02.07
ссылка на сообщение  Отправлено: 28.03.09 01:58. Заголовок: Петр, спасибо еще ра..


Петр, спасибо еще раз - попробовал MSXML (у меня в Win98SE стоит 4.2) на ваших примерах, срабатывает "мухой". Действительно,

 цитата:
мощная штука


Думаю, что не только мне поможет... В связи с этим пара-тройка вопросов:

1. В общем-то сам SDK целиком, как кажется, мне (пока) не особенно необходим (и на MS-сайте почему-то доступна только англ. версия; или я чего-то не понял?); нужен собственно Help по свойствам, функциям и пр. (отдельный от всего SDK). Где взять возможно? (желательно бы русский, но если нет - то и engl. сойдет)

2. Насчет "libxml2" - эта библиотека только для Linux? (т.к. хотелось бы иметь _одинаковые_ [по возможности] исходники - для [если нужно будет] "маневра").

3. Или еще какое решение можете предложить? (для "кроссплатформенного" подхода)

(спустя 15 мин.) Прощенья просим :) - вопрос (2) снимается: библиотека существует для многих ОС, в т.ч. и для Linux, и для Win (бинарники доступны, но работа на версиях _до_ Win2000 не гарантирована; исходники доступны также). Кого заинтересовало - тем сюда: http://citkit.ru/package/libxml/


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 626
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 29.03.09 00:20. Заголовок: gustow пишет: Где в..


gustow пишет:

 цитата:
Где взять возможно?


Не совсем вопрос понял - после инсталяции SDK у меня лежит в C:\Program Files\MSXML 6.0\Docs\xmlsdk6.chm
MSXML->DOM Reference->DOM Methods
MSXML->DOM Reference->DOM Properties и т.п.
тоже самое SAX2

3. Меня и эти решения устраивают. Если по своим возможностям "монстрообразные" MSXML и libxml2 вам не подходят, а это де факто стандарт для обработки XML то не знаю.., скорее всего придется писать самому Шутка. Это слишком общий вопрос, на который можете найти ответ только вы.


Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Пост N: 88
Зарегистрирован: 06.02.07
ссылка на сообщение  Отправлено: 29.03.09 23:33. Заголовок: Петр пишет: Не совс..


Петр пишет:

 цитата:
Не совсем вопрос понял


Вопрос снят: просто думал, что сначала отдельно Help содрать/поизучать (просто доступ в Интернет бывает в основном "либо медленно, либо дорого, либо лимит кончился"). Скачал и MSXML, и LIBXML - буду определяться :)
Спасибо большое за помощь!

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 199
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет