:: Архив конференции по VFP до 2005 года
XMLAdapter
Кэт
Автор

Сообщений: 408
Дата регистрации: 11.11.2002
Такой вот тестовый примерчик

В XML все сбрасывается нормально.
Но при попытке
adapter.LoadXML(lcFile,.T.)
возникает ошибка,
т.к. например поля "дата время" имеют пустое значение
в таблице(и соответственно сбросились в XML тоже пустым значением)
и посему в курсор не грузит,
как это обойти
Спасибо
**********************************************************
rrr=SECONDS()
ADBOBJECTS(myArrayName, 'TABLE')
lcFile="c:\test.xml"
*lcXSDFile = "c:\test.xsd"
loAdapter=CREATEOBJECT("XMLAdapter")
loAdapter.Unicode= .F.
loAdapter.RespectCursorCP= .t.
*loAdapter.XMLSchemaLocation='lcXSDFile'
FOR i=1 TO ALEN(myArrayName,1)
lcDBFname=myArrayName[i]
IF !USED(lcDBFname)
USE (lcDBFname) IN 0 EXCLUSIVE
ENDIF
SELECT (lcDBFname)
loAdapter.AddTableSchema(lcDBFname)
loAdapter.Tables(i).Alias =lcDBFname
ENDFOR
********************************************
loAdapter.ToXML(lcFile,"",.T.)
********************************************
FOR i=1 TO ALEN(myArrayName,1)
lcDBFname=myArrayName[i]
IF USED(lcDBFname)
SELECT (lcDBFname)
USE
ENDIF
ENDFOR
********************************************
MESSAGEBOX(SECONDS()-rrr)
**********************************************
* Name of an XML file.
lcFile="c:\test.xml"
* Create an XMLAdapter object to load the XML file into.
adapter = CREATEOBJECT("XMLAdapter")
Adapter.Unicode= .F.
Adapter.RespectCursorCP= .t.
*adapter.XMLSchemaLocation = lcXSDFile
* Read the XML file into the XMLAdapter object.
adapter.LoadXML(lcFile,.T.)
* Iterate through all the XMLTables created from the XML file and generate
* cursors.
FOR EACH oXMLTable IN adapter.Tables
* Create a cursor from one of the XMLTables created from the contents of the
* XML file.
oXMLTable.ToCursor()
ENDFOR
RETURN
Ratings: 0 negative/0 positive
Re: XMLAdapter
Aleksey Tsingauz [MSFT]
clear
CLOSE DATABASES all
CREATE CURSOR foo (f1 D)
APPEND BLANK
APPEND BLANK
replace f1 WITH DATETIME()
list
LOCAL oXA as XMLAdapter
oXA=CREATEOBJECT("XMLAdapter")
oXA.AddTableSchema("foo")
oXA.XMLSchemaLocation="test.xsd"
oXA.ToXML("test.xml",,.T.)
CLOSE TABLES all
oXA.LoadXML("test.xml",.T.,.F.)
oXA.Tables(1).ToCursor()
LIST
Ratings: 0 negative/0 positive
Re: XMLAdapter
Кэт
Автор

Сообщений: 408
Дата регистрации: 11.11.2002
Спасибо Алексей,
не разобралась с параметрами метода LoadXML
Сейчас понятно...

Вот что интресно, вообще скорость загрузки в
XML файл поразительная!
Из множества таблиц моей БД
(скока записей не считала, таблиц много), выходной файл (lcFile="c:\test.xml" ) 8 мегабайт!
1,8 секунд первично
За 0,3 !секунды повтрно, на кешированных записях наверно
Тут стоит отдать должное...

А вот обратно в курсоры, чего то несопоставимо медленней
177 секунд!
процессор на 100 процентов загружен, аж дымок идет

да еще и в подкачке полно, с учетом что у меня 512 метров памяти

Вот тест Вашего примера:
первая мессага 0,04
вторая 4,3
То есть в 100 раз медленее
Печально как-то.....
SET SAFETY OFF
clear
CLOSE DATABASES all
CREATE CURSOR foo (f1 T)
APPEND BLANK
FOR i=1 TO 10000
APPEND BLANK
replace f1 WITH DATETIME()
ENDFOR
*list
rrr=SECONDS()
LOCAL oXA as XMLAdapter
oXA=CREATEOBJECT("XMLAdapter")
oXA.AddTableSchema("foo")
oXA.XMLSchemaLocation="test.xsd"
oXA.ToXML("test.xml",,.T.)
CLOSE TABLES all
MESSAGEBOX(SECONDS()-rrr)
rrr=SECONDS()
oXA.LoadXML("test.xml",.T.,.F.)
oXA.Tables(1).ToCursor()
MESSAGEBOX(SECONDS()-rrr)
*LIST



Отредактировано (27.02.05 00:54)


------------------
Ratings: 0 negative/0 positive
Re: XMLAdapter
Aleksey Tsingauz [MSFT]
Кэт писал(а):
Цитата:
Спасибо Алексей,
А вот обратно в курсоры, чего то несопоставимо медленней
177 секунд!
процессор на 100 процентов загружен, аж дымок идет


С oXA.PreserveWhiteSpace= .T. должно быть значительно быстрее.
Ratings: 0 negative/0 positive
Re: XMLAdapter
Кэт
Автор

Сообщений: 408
Дата регистрации: 11.11.2002
Спасибо Алексей
Скоро разберемся

Да, Вы правы
Ваш пример
1-0,04
2-0,25

Моя БД-разнородные данные
0,38
4,3
Уже нормально. разница в 10 раз почти

Спасибо...
Ratings: 0 negative/0 positive


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

On-line: 6 (Гостей: 6)

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