powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Долго разбирает XML
10 сообщений из 10, страница 1 из 1
Долго разбирает XML
    #33630115
Liala
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть функция
function TOWDebtersParser.LoadXML(XML: WideString): boolean;
var
dr: PContract;
Doc: DOMDocument;
TmpNode: IXMLDOMNode;
Nodes: IXMLDOMNodeList;
i: integer;
A, B: string;
begin
ClearList;
Result := true;
Doc := CreateComObject(CLASS_DOMDocument) as IXMLDOMDocument;
try
try
Doc.Set_async(false);
Doc.loadXML(XML);
Nodes := Doc.selectSingleNode('DEB').selectSingleNode('LIST_G_CONTRACT_NUMBER').selectNodes('G_CONTRACT_NUMBER');
A:=TimeToStr(Time);
for i := 0 to Nodes.length -1 do
begin
TmpNode := Nodes.item ;
New(dr);
with dr^ do
begin
....
CARDHOLDER := TmpNode.selectSingleNode('CARDHOLDER').text;
......
end;
FContractList.AddObject(dr^.CARDHOLDER, TObject(dr));
end;
except
Result := false;
end;
finally
B:=TimeToStr(Time);
Doc := nil;
end;
end;


если записей примерно 5000, то работает 1 минуту 13 секунд на 26000 записей работает порядка получаса. Можно ли что то сделать?
...
Рейтинг: 0 / 0
Долго разбирает XML
    #33630258
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример XML сюда.
...
Рейтинг: 0 / 0
Долго разбирает XML
    #33630370
Liala
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jimmersПример XML сюда.

<?xml version="1.0"?>
<!-- Generated by Oracle Reports version 9.0.4.0.21 -->
<ZADOLZHENNOST>
<LIST_G_CONTRACT_NUMBER>
<G_CONTRACT_NUMBER>
<BIRTH_DATE>200574</BIRTH_DATE>
<PENNY>.05</PENNY>
<INTERESTS>39.59</ INTERESTS>
<DUE>73.35</DUE>
<OVR>77.21</OVR>
<PERSONAL_ID>1234567C022PB1</PERSONAL_ID>
<CARDHOLDER>ИВАНОВ ИВАН ИВАНОВИЧ</CARDHOLDER>
<CONTRACT_NUMBER>749-PC-999999</CONTRACT_NUMBER>
<WORK_PHONE>80172702099</WORK_PHONE>
<HOME_PHONE>80172177499</HOME_PHONE>
<MOBILE_PHONE>+375293333333</MOBILE_PHONE>
<CURR>USD</CURR>
</G_CONTRACT_NUMBER>
<G_CONTRACT_NUMBER>
<BIRTH_DATE>200574</BIRTH_DATE>
<PENNY>.05</PENNY>
<INTERESTS>39.59</ INTERESTS>
<DUE>73.35</DUE>
<OVR>77.21</OVR>
<PERSONAL_ID>1234567C022PB2</PERSONAL_ID>
<CARDHOLDER>ИВАНОВ ИВАН ПЕТРОВИЧ</CARDHOLDER>
<CONTRACT_NUMBER>749-PC-999991</CONTRACT_NUMBER>
<WORK_PHONE>80172702099</WORK_PHONE>
<HOME_PHONE>80172177499</HOME_PHONE>
<MOBILE_PHONE>+375293333333</MOBILE_PHONE>
<CURR>USD</CURR>
</G_CONTRACT_NUMBER>
</LIST_G_CONTRACT_NUMBER>
</ZADOLZHENNOST>
...
Рейтинг: 0 / 0
Долго разбирает XML
    #33630746
Yura Nickolaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если я верно понял, то используется MSXML?
Тогда я бы посоветовал писать нормальные XPATH-выражения, selectSingleNode вобщем-то их и ждет
Liala
Nodes := Doc.selectSingleNode('DEB').selectSingleNode('LIST_G_CONTRACT_NUMBER').selectNodes('G_CONTRACT_NUMBER');


Что-то типа:
Код: plaintext
Nodes := Doc.selectNodes('DEB/LIST_G_CONTRACT_NUMBER/G_CONTRACT_NUMBER')

ну или что на самом деле надо получить :)
...
Рейтинг: 0 / 0
Долго разбирает XML
    #33631571
Liala
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yura NickolaevЕсли я верно понял, то используется MSXML?
Тогда я бы посоветовал писать нормальные XPATH-выражения, selectSingleNode вобщем-то их и ждет
Liala
Nodes := Doc.selectSingleNode('DEB').selectSingleNode('LIST_G_CONTRACT_NUMBER').selectNodes('G_CONTRACT_NUMBER');


Что-то типа:
Код: plaintext
Nodes := Doc.selectNodes('DEB/LIST_G_CONTRACT_NUMBER/G_CONTRACT_NUMBER')

ну или что на самом деле надо получить :)

Да не в этом дело. Разбор идет в цикле
BIRTH_DATE := TmpNode.selectSingleNode('BIRTH_DATE').text;
INTERESTS := TmpNode.selectSingleNode('INTERESTS').text;
DUE := TmpNode.selectSingleNode('DUE').text;
OVR := TmpNode.selectSingleNode('OVR').text;
PENNY := TmpNode.selectSingleNode('PENNY').text;
PERSONAL_ID := TmpNode.selectSingleNode('PERSONAL_ID').text;
CARDHOLDER := TmpNode.selectSingleNode('CARDHOLDER').text;
CONTRACT_NUMBER := TmpNode.selectSingleNode('CONTRACT_NUMBER').text;
WORK_PHONE := TmpNode.selectSingleNode('WORK_PHONE').text;
HOME_PHONE := TmpNode.selectSingleNode('HOME_PHONE').text;
MOBILE_PHONE := TmpNode.selectSingleNode('MOBILE_PHONE').text;
CURR := TmpNode.selectSingleNode('CURR').text;

то что ей надо разобрать. Только на большом количесве записей работает очень медленно
...
Рейтинг: 0 / 0
Долго разбирает XML
    #33633048
Фотография Мигалка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может заюзать sax вместо dom?
...
Рейтинг: 0 / 0
Долго разбирает XML
    #33633342
Liala
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МигалкаМожет заюзать sax вместо dom?
А чуть подробнее можно?
...
Рейтинг: 0 / 0
Долго разбирает XML
    #33633369
Фотография Мигалка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Liala МигалкаМожет заюзать sax вместо dom?
А чуть подробнее можно?dom грузит файл целиком в память, sax - нет. Если надо просто пробежать с начала до конца, то нафиг dom. http://www.sql.ru/forum/actualsearch.aspx?search=sax&sin=0&a=&ma=0&bid=20&dt=-1&s=1&so=1
...
Рейтинг: 0 / 0
Долго разбирает XML
    #33633426
Liala
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мигалка Liala МигалкаМожет заюзать sax вместо dom?
А чуть подробнее можно?dom грузит файл целиком в память, sax - нет. Если надо просто пробежать с начала до конца, то нафиг dom. http://www.sql.ru/forum/actualsearch.aspx?search=sax&sin=0&a=&ma=0&bid=20&dt=-1&s=1&so=1

Если чесно я в этом полный ноль. Может сайтик какой толковый посоветуете хоть почитать про этот SAX как с ним работать.
...
Рейтинг: 0 / 0
Долго разбирает XML
    #33633438
Фотография Мигалка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LialaМожет сайтик какой толковый посоветуете хоть почитать про этот SAX как с ним работать. msdn.rambler.ru
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Долго разбирает XML
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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