ПредишенСледващото

В статията се показва как да се направи елегантен четене големи XML файлове

Ако е необходимо, прочетете XML, един подход може да бъде приложен файл напълно зареден в DOM и последователно четене. Пълното зареждане на XML файл в DOM изпълнява в 1C в по DokumentDOM обект. DOM - това е готино, но аз няма да говоря за това днес, защото това е сравнително голям XML файлове, след което DOM не е подходящ. Поред четене на XML файлове, изпълнявани в 1C с помощта на такъв обект, както ChtenieXML. Има и други обекти в 1С за работа с XML, но днес, отново, не за тях.

ChtenieXML обект - ярък представител на верижната на подход прочетете XML файл. Сигурен съм, че ли да си представите как кодът прилича използване ChtenieXML обект. Той има много линии и условия в сравнение вид и име на хост. Не ми харесва този код, и аз не го напиша. Ако вие нямате представа как изглежда това на кода, решаване на проблема, описан по-долу демо използване ChtenieXML обект и ще бъде ясно за какво говоря.

На входа Kontragenty.xml файл със следната структура и съдържание:

Ние продаваме натоварване работа контрагенти контрагенти Изтегляне ". С кликване върху бутона "Изтегляне" следния код:

Първо, вие създавате универсална обработка ElegantnoeChtenieXML и извика методът Read. Първият аргумент предава името на XML файл. Вторият аргумент премина в специален обект на делегата. Обработка с четене последователно XML файл, стартира методи делегат обект в началото на блока за четене, устройството завършване на четене и някои други случаи.

Обектът делегат трябва да изпълни следните методи:

Процедура 1. Започнете (ChtenieXML) износ - тази процедура е започнала в началото на процеса на XML файл, че е възможно да започне някои променливи и конфигуриране на обект ChtenieXML

2. Изпълнение на функцията () експортирате - тази функция започва късно и трябва да се върне в резултат на обработката на файла и може да се върне неопределен - това е нормално

3. Функция UzelNachalo (ChtenieXML, Node) износ - тази функция се задейства всеки път, когато нов възел започва да се обработи. Възел параметър вече се счита информацията за възела: местното име, именно пространство атрибут таблицата на URI, и така нататък. параметър ChtenieXML се предава, за да можете да независимо допълни събрание необходимите празни имоти. Ключовият момент - функцията трябва да се върне вярно, ако възелът е била обработена в тази функция, както и фалшиво, ако не се лекува. Ако възелът не се обработват, методът ще се нарича UzelNachalo (ChtenieXML, Node), в противен случай тя няма да

4. Функция UzelZavershenie (възел) износ - тази функция се задейства винаги облицовки обработка възел. Възелът на параметър е цялата необходима информация за възела. Ключовият момент - функцията трябва да се върне вярно, ако възелът е била обработена в тази функция, както и фалшиво, ако не се лекува. Ако възелът не се обработват, методът ще се нарича UzelZavershenie (Node), в противен случай тя няма.

5. UzelNachalo Процедура (ChtenieXML, Node) износ - тази процедура се стартира всеки път, когато тя започва да се обработва възел с местната маркер име, освен ако преди това не е бил възел обработват от UzelNachalo на повикване (ChtenieXML, Node)

6. UzelZavershenie Процедура (Node) износ - тази процедура се стартира всеки път, когато завършва обработката възел с местната маркер име, освен ако преди този възел не е била обработена с обаждането UzelZavershenie (Node)

параметър възел освен това съдържа информация за текущия сайт, той все още се отнася до възел майка. Родителските възли съществуват все още се обработват всички деца си възли. С други думи, достъп до родителя възли, винаги можете да.

В нашия пример, обектът преминава към обработка делегат текущата инстанция "обект модул Зареждане на контрагентите, които са както следва:

Имайте предвид, че в по-горе код, без цикъл, няма условия за типа сравнение и името на хоста. По мое мнение, това е много лесно да се чете.

Аз трябваше да уточни таговете в квадратни скоби, като ъгъла "поглъщане" infostartom.

Забележка 3: В съответствие с описанието на името на XML маркер може да съдържа само букви, цифри и долна черта, но и други знаци, като "-" или ".". В XML предположим, например, като маркера [а-b.c]. Ето защо, за всички невалиден идентификатор 1C се игнорират, така че за примера по-горе, маркерът ще бъдат обработвани от UzelABCNachalo (ChtenieXML, Node).

Забележка 5: стойност възел, т.е. текстът на която се намира между отваряне и затваряне тагове, можете да получите като Uzel.Znachenie, но това може да стане само в края на устройството за обработка, т.е. метода UzelZavershenie (Node) или UzelZavershenie (Node).

В допълнение към тези функции, със сигурност има и други.

Убеден съм, че текущото изпълнение не е съвършен, но аз не си беше поставила за подобна задача. Аз просто исках да се докаже един подход, който аз мисля, елегантна.

Ако имате въпроси, а след това Download ElegantnoeChtenieXML.cf

Благодаря ви за вниманието.

11. Андрю Ovsyankin (Evil Beaver) 4341 8/10/14 18:47 Сега тема

(5) rtnm, минус за мотора, издадена за определен елегантен четене. По-малко, тъй като този подход се насърчава сред обществото, а не да настоява начинаещи да учат по-малко колоездачни решения.

budunovmv; alexscamp; Ивон; YPermitin; Нормално; IvanBoychuk123; baton_pk; zqzq; DrAku1a; 1cWin; rtnm; + 11 - Отговор

6. Александър *** (a1ex4ndr) 10.08.14 13:11 Сега тема

И тествана на някои размера на файла? И в тест файл от трите линии.

7. rtnm rtnm (rtnm) 542 10/08/14 13:13 Сега тема

(6) a1ex4ndr, това не е от размера на файла, и в начина, по - чете последователно. Не чудеса няма да са съпоставими с всички ChtenieXML.

8. DUH Technolover (DJDUH) 16 10/08/14 13:46 Сега тема

9. rtnm rtnm (rtnm) 542 10/08/14 14:01 Сега тема

10. DAnry (DAnry) 12 08/10/14 15:38 Сега тема

Харесва ми също. Plyusanul.

12. Владимир ковчежници (Mogidin) 123 10/09/14 13:27 Сега тема

ChtenieXML същото, но много по-бързо

15. Константин Yurin (kostyaomsk) 72 23/10/14 10:23 Сега тема

16. Андрю Ovsyankin (Evil Beaver) 4341 28/10/14 17:01 Сега тема

(12) Mogidin, Th, насочи много? И цифрите са?

13. Дмитрий Никс (aximo) 668 10/09/14 19:17 Сега тема

Между другото, вие всъщност се работи с големи XML-файлове? Факт е, че ако за маркиране на текст UV на повече от 10 MB (от опит) платформа 8.2 може да доведе до запазването на файла грешка.

14. rtnm rtnm (rtnm) 542 10/09/14 22:48 Сега тема

(13) aximo, с големи XML-файлове с UV не работи

17. DrZombi DrZombi (DrZombi) 05.11.14 15:52 Сега тема


к.с. да DBF също така е възможно да се организира на дървото, но е необходимо да се nakoy;)

18. rtnm rtnm (rtnm) 542 05.11.14 17:08 Сега тема

(17) DrZombi, следващия път и да каже на клиента, "Вашето XML гадно Дай ми DBF, правя с него много по-хубаво да се работи." :)

19. Константин Yurin (kostyaomsk) 72 14/11/14 20:47 Сега тема

Най-досадно нещо във формат DBF е дължината на текстовото поле (Страх ме е да направи грешка) 254 герои и след това от 1C трябва да залепите струни или разтоварване в DBF да се разцепи. И най-новите версии на DBF формат могат да подкрепят и Мемо поле (низ от неограничена дължина), но вече в обекта 1C XBase.
DBF смисъл да се използва, освен ако едностранно AIS тип парадокс (FoxPro, 1С 7.7 в режим на файл) генерира за обмен (или зарежда в него), или е външен източник на данни.

Sozdanie02.10.14 09:55

Obnovlenie02.10.14 09:55

Код посочено otkrytNe

Елегантен прочетете големи на XML файлове

Елегантен прочетете големи на XML файлове

Елегантен прочетете големи на XML файлове

Елегантен прочетете големи на XML файлове

Свързани статии

Подкрепете проекта - споделете линка, благодаря!