Parsarea document XML folosind xdto, fără utilizarea de pachete și xdto-schema XML (pentru foarte leneș)

Cum să analizăm un document XML utilizând XDTO fără modificări de configurație, fără scheme de date XML și să nu cadă cu eroarea "insuficient de memorie". Mai ales că trebuie să luați în considerare acest document XML o singură dată.







După ce a stăpânit o secvență simplă de citire XML, citind pentru un singur fișier XML, nu am recurge la nici un alt mod, înainte până când am întâlnit sarcina de a descărca date din fișierul „Mad“.

ITS: Optimizarea utilizării memoriei RAM.
Este inacceptabil să se ocupe de documente XML mari, folosind built-in obiecte de limbă pentru procesarea întregului fișier: documente de tip text în TextDocument, XML și HTML în DokumentDOM în DokumentHTML, și de a crea o memorie de pachete XDTO-size, cu toate fișier XML ca un întreg.

În caz contrar, întregul fișier este încărcat în întreaga memorie. Excepțiile sunt cazuri individuale, când aveți nevoie de acces arbitrar la conținutul fișierului, la o anumită parte a acestuia.

Ar trebui să utilizați obiecte pentru scrierea secvențială și citirea secvențială: citirea XML, citirea textului, înregistrarea XML, scrierea textului, cu ajutorul căreia puteți citi fișierul în loturi și consumați cu ușurință memoria.

Dacă utilizați mecanisme XDTO, este greșit să citiți întregul fișier XML în memorie (FactoryXTDO.Clear XML (Read XML)). În schimb, ar trebui să citiți fișierul XML secvențial, folosind obiectul Read XML și fragmente individuale (etichete) să deserializeze utilizând fabrica XDTO.







Eu, așa cum era de așteptat, deja în dosar în 300 MB, cu încredere plâns standard 1C-ceva "Nu suficient de memorie" și afară. Am fost convins de practica că în XDTO pentru a împinge întregul fișier nu este bun. Dar înapoi la citat cu STI, dar în ea există o parte a răspunsului, ce să fac și cum. Și nu am găsit un exemplu real care să fie simplu, fără utilizarea pachetelor XDTO, a schemelor XML și, în același timp, să îndeplinească cerințele 1C în optimizarea utilizării memoriei RAM. Și trebuia să mă gândesc puțin și asta sa întâmplat:

În acest exemplu, documentul XML începe să fie analizat prin citirea normală până când ajunge la nodul dorit. Acest nod reprezintă doar obiectul dorit, în cazul nostru este Nomenclatura (în fișierul XML "OFERTA") și apoi fișierul este analizat deja de noduri, secvențial. O frază după alta. În fiecare propoziție, primesc deja datele divizate legate de acest obiect (propunere). Viteza de lucru: 29.000 de oferte (și o propunere conține o grămadă de proprietăți și proprietăți, unele dintre ele pot fi văzute pe prima captură de ecran) pe un laptop mediocru au fost dezasamblate în 1,5 minute.

În fișierul atașat sunt: ​​Tratament - un exemplu de citire a datelor din algoritmul de mai sus, și un exemplu de un fișier XML care conține cele 10 poziții pentru a putea testa procesul, si uita-te mai detaliat, la toate în debugger. Procesarea a fost scrisă sub platforma 8.2 pentru formulare regulate.

Poate că veți considera acest lucru o perversiune, poate că nu. Lasă-ți opinia, te rog, este interesant să știi dacă acest mod ar putea fi trecut în mod diferit.







Trimiteți-le prietenilor: