|
|
|
Долго разбирает XML
|
|||
|---|---|---|---|
|
#18+
Есть функция 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 записей работает порядка получаса. Можно ли что то сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2006, 16:01 |
|
||
|
Долго разбирает XML
|
|||
|---|---|---|---|
|
#18+
Пример XML сюда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2006, 16:43 |
|
||
|
Долго разбирает XML
|
|||
|---|---|---|---|
|
#18+
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> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2006, 17:15 |
|
||
|
Долго разбирает XML
|
|||
|---|---|---|---|
|
#18+
Если я верно понял, то используется MSXML? Тогда я бы посоветовал писать нормальные XPATH-выражения, selectSingleNode вобщем-то их и ждет Liala Nodes := Doc.selectSingleNode('DEB').selectSingleNode('LIST_G_CONTRACT_NUMBER').selectNodes('G_CONTRACT_NUMBER'); Что-то типа: Код: plaintext ну или что на самом деле надо получить :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2006, 19:43 |
|
||
|
Долго разбирает XML
|
|||
|---|---|---|---|
|
#18+
Yura NickolaevЕсли я верно понял, то используется MSXML? Тогда я бы посоветовал писать нормальные XPATH-выражения, selectSingleNode вобщем-то их и ждет Liala Nodes := Doc.selectSingleNode('DEB').selectSingleNode('LIST_G_CONTRACT_NUMBER').selectNodes('G_CONTRACT_NUMBER'); Что-то типа: Код: plaintext ну или что на самом деле надо получить :) Да не в этом дело. Разбор идет в цикле 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; то что ей надо разобрать. Только на большом количесве записей работает очень медленно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2006, 10:58 |
|
||
|
Долго разбирает XML
|
|||
|---|---|---|---|
|
#18+
Может заюзать sax вместо dom? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2006, 16:36 |
|
||
|
Долго разбирает XML
|
|||
|---|---|---|---|
|
#18+
МигалкаМожет заюзать sax вместо dom? А чуть подробнее можно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2006, 17:53 |
|
||
|
Долго разбирает XML
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2006, 18:01 |
|
||
|
Долго разбирает XML
|
|||
|---|---|---|---|
|
#18+
Мигалка 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 как с ним работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2006, 18:22 |
|
||
|
Долго разбирает XML
|
|||
|---|---|---|---|
|
#18+
LialaМожет сайтик какой толковый посоветуете хоть почитать про этот SAX как с ним работать. msdn.rambler.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2006, 18:27 |
|
||
|
|

start [/forum/topic.php?fid=14&fpage=75&tid=1334833]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 250ms |
| total: | 362ms |

| 0 / 0 |
