:: Visual Foxpro, Foxpro for DOS
Как считать XML-файл в таблицу.
lili

Сообщений: 436
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
Приветствую всех!
Нужно из XML-файла заполнить таблицу (разбирать его по тэгам не хотелось бы).
Интуитивно пробовала так, но виснет все уже на команде oXMLAdapter.LoadXML(lFile,.T.), хотя файлик совсем небольшой:
oXMLAdapter=CREATEOBJECT('XMLAdapter')
lFile='file.xml'
oXMLAdapter.LoadXML(lFile,.T.)
Crs_test=CREATEOBJECT('CursorAdapter')
WITH crs_test
.alias="test"
.SelectCmd="oXMLAdapter.Tables.Item(1)"
.CursorFill()
ENDWITH
Буду благодарна за конкретный примерчик.
Ratings: 0 negative/0 positive
Re: Как считать XML-файл в таблицу.
AndyNigmatec

Сообщений: 1574
Откуда: Волгоград
Дата регистрации: 28.06.2015
Дайте пример файлика который распарсить хотите
Ratings: 0 negative/0 positive
Re: Как считать XML-файл в таблицу.
lili

Сообщений: 436
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
Да, собственно, без разницы, какой файлик - нужен алгоритм.
Что-то не вижу, как тут файл прицепить ((
Ratings: 0 negative/0 positive
Re: Как считать XML-файл в таблицу.
AndyNigmatec

Сообщений: 1574
Откуда: Волгоград
Дата регистрации: 28.06.2015
зипуйте и прикрепляйте к сообщению - так куда больше шансов что вам помогут ))

Я у себя именно разбор пользую, работает шустро, типа (пример без конкретики):


lcXmlFile=...
xmlDoc=CREATEOBJECT("MSXML2.DOMDocument")
xmlDoc.async = .F.
IF xmlDoc.Load(lcXmlFile)
...
node_List = xmlDoc.selectNodes("*//ITEM")
SELECT 0
CREATE CURSOR cData0 (code c(20))
*-- цикл по результирующему набору
FOR intIndex = 1 TO node_List.Length
xmlNode = node_List.Item(intIndex-1).CloneNode(.T.)
m.code=xmlNode.getElementsByTagName("CODE").Item(0).text
SELECT('cData0')
APPEND BLANK
GATHER MEMVAR
ENDFOR
ELSE
* lcOk=0
* echo1('load - false')
ENDIF
RELEASE xmlDoc
Ratings: 0 negative/0 positive
Re: Как считать XML-файл в таблицу.
lili

Сообщений: 436
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
Разбор я тоже умею делать. Но у меня в обработке огромный файл и разбором я из него заполняю таблицу больше часа. А хочется побыстрее и, думается, что есть методы более продвинутые. Знаю, что можно через XMLAdapter->CursorAdapter, но что-то не так, видимо, делаю. Вот и хотела конкретный примерчик.
Ratings: 0 negative/0 positive
Re: Как считать XML-файл в таблицу.
AndyNigmatec

Сообщений: 1574
Откуда: Волгоград
Дата регистрации: 28.06.2015
это что же за файл - гигабайты?

через указанный DOM-механизм работает шустро весьма, секунды, ну никак не часы ...
Ratings: 0 negative/0 positive
Re: Как считать XML-файл в таблицу.
lili

Сообщений: 436
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
нет, МегаБайты, порядка 200 тыс. записей с десятком полей
Ratings: 0 negative/0 positive
Re: Как считать XML-файл в таблицу.
AndyNigmatec

Сообщений: 1574
Откуда: Волгоград
Дата регистрации: 28.06.2015
200 тыс - это не много)) не может тут никаких часов парсинга быть - минуты максимум, что-то у вас там не так ...

предлагаю все же закинуть сюда файл - только не целиком, а лишь маленькую часть данных
Ratings: 0 negative/0 positive
Re: Как считать XML-файл в таблицу.
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
lili
Да, собственно, без разницы, какой файлик -
Кто сказал вам эту чушь?
Цитата:
нужен алгоритм.
С чего решили что есть какой-то волшебный алгоритм разбора произвольного файла?
Цитата:
Что-то не вижу, как тут файл прицепить ((
Написано по-русски - "Присоеднить файл"

------------------
Лень - это неосознанная мудрость.




Исправлено 1 раз(а). Последнее : ssa, 10.01.23 19:38
Ratings: 0 negative/0 positive
Re: Как считать XML-файл в таблицу.
lili

Сообщений: 436
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
Я еще попробую приведенный вами код разбора (у меня немного отличается).
А так я хотела пример именно через XMLAdapter->CursorAdapter, чтобы попробовать и такой вариант.
Ratings: 0 negative/0 positive
Re: Как считать XML-файл в таблицу.
lili

Сообщений: 436
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
Вот кусочек их файла.
Ratings: 0 negative/0 positive
Re: Как считать XML-файл в таблицу.
AndyNigmatec

Сообщений: 1574
Откуда: Волгоград
Дата регистрации: 28.06.2015
По вашему файлику - вижу как минимум две плоские таблицы: одну по тэгу INDIVIDUALS и вторую по ENTITIES

Рассмотрим первую - по INDIVIDUALS
как видим здесь INDIVIDUAL_ALIAS может присутствовать в нескольких вариантах для каждого INDIVIDUAL - соотв. вопрос - вам нужны все имеющиеся или достаточно первого по порядку? Если все, то придется в нашей плоской таблице создавать соотв. несколько почти дублирующихся записей (с разными INDIVIDUAL_ALIAS) ... вот пример такого варианта:

я конечно не большой спец, но для своих нужд аналогичный разбор использую - и работает весьма шустро.
Может кто из форумчан ближе к теме - то поправит.



Исправлено 3 раз(а). Последнее : AndyNigmatec, 11.01.23 13:02
Ratings: 0 negative/0 positive
Re: Как считать XML-файл в таблицу.
lili

Сообщений: 436
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
Спасибо. Ну, я по тому же принципу алгоритм строю.
Ratings: 0 negative/0 positive
Re: Как считать XML-файл в таблицу.
AndyNigmatec

Сообщений: 1574
Откуда: Волгоград
Дата регистрации: 28.06.2015
ну так давайте прогоним приведенный код по полным данным - посмотрим сколько времени займет ))

Как я понял, весь вопрос был именно по скорости работы



Исправлено 1 раз(а). Последнее : AndyNigmatec, 11.01.23 14:14
Ratings: 0 negative/0 positive
Re: Как считать XML-файл в таблицу.
AndyNigmatec

Сообщений: 1574
Откуда: Волгоград
Дата регистрации: 28.06.2015
lili
А так я хотела пример именно через XMLAdapter->CursorAdapter, чтобы попробовать и такой вариант.

боюсь что на таких данных такой фокус не прокатит ((
Ratings: 0 negative/0 positive
Re: Как считать XML-файл в таблицу.
of63
Автор

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Не работает DOM на больших файлах. Было тут на форуме, и от ИК особенно внятно, про SAX (?) - технологию разбора XML-файла без построения DOM, а последовательным чтением тэгов файла XML.

() "старые" добрые "списки террористов в РФ" так же выглядят. Там организации сначала, потом ФИО... Сомневаюсь, что большой файл XML, с секциями (сначала организации, потом ФИО, потом еще что-то... набор из непохожих кусков...). Думал, что МС рано или поздно убыстрят прием пногомегабайтных фвайлов в своей ОС, но фик. Как написал самольпальный последовательный приемник тэгов из XML, так и им пользуюсь, от МС не видел ускорения чтения таких файлов в DOM (что по памяти невозможно при расходе памяти чуть не 10 к 1 на байт файла XML.

Попробуйте SAX, я не понял как ей (техникой) пользоваться, но пример от ИК где-то тут есть...

Доб. И с курсором >1Г будут проблемы, если поля сделаете не мемо, а C-шные, и при индексации... Хотя, информации в таких файлах немного. Формат DBF был бы компактнее, если бы генераторы этих файлов XML думали об их читателях. Возможно, это агенты не кремля, и заставляют нас изучать программирование, на своем ЯП, типа XML-кодеров/декодеров. Шутка )

Искать SAX*
forum.foxclub.ru



Исправлено 2 раз(а). Последнее : of63, 11.01.23 19:43
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 22 leonid  (Гостей: 21)

© 2000-2024 Fox Club 
Яндекс.Метрика