XML-парсер "от О-Планета"

05.10.09

Интеграция - WEB-интеграция

Парсер реализован средствами языка. Поставляется в виде внешней обработки. Может использоваться, как обработка, к методам которой можно обращаться из программы. Также модуль парсера может быть вставлен отдельно в конфигурацию, в качестве общего модуля. Реализованные методы поддерживают объектно-ориентированный принцип работы и предоставляют интуитивно понятный механизм.

Скачать файлы

Наименование Файл Версия Размер
ХМЛ-Парсер
.zip 27,92Kb
682
.zip 27,92Kb 682 Скачать

Не спрашивайте, чем плохи стандартные методы работы с XML, реализованные в восьмерке. Просто разные парсеры и компиляторы - это моя слабость. Ну а потом, не видел (но, может, и ошибаюсь), чтобы стандартный парсер сразу выплевывал на форму дерево структуры XML-документа, позволял его редактировать, а потом снова сохранял в xml-документ.

В общем, эта обработка поможет тем, кто по каким-либо причинам не хочет (не может, боится) использовать типовые функции работы с XML. С "парсером от планета" XML - это просто! :)

Берите, тестируйте, пользуйтесь. Разработка снабжена подробной инструкцией.

Буду очень рад комментариям.

 


Отвечая на вопрос Чебуратора: "... а сабж - это что???", приведу небольшие примеры кода. Парсер позволяет читать, разбирать и создавать XML-файлы на интуитивном уровне.

Примеры создания xml:

ХМЛ = ХМЛСоздать();
Параметры = Новый Соответствие;
Параметры.Вставить("Название","Рога и копыта");
ХМЛДобавить(ХМЛ,"Организация",Параметры);
ХМЛДобавить(ХМЛ,"Сотрудник",, "Иванов", Истина);
ХМЛДобавить(ХМЛ,"Сотрудник",, "Петров", Истина);
ХМЛДобавить(ХМЛ,"Сотрудник",, "Сидоров", Истина);
Параметры.Вставить("Название","Бананы и ананасы");
ХМЛДобавить(ХМЛ,"Организация",Параметры);
ХМЛДобавить(ХМЛ,"Сотрудник",, "Дарт Вейдер", Истина);
ХМЛДобавить(ХМЛ,"Сотрудник",, "Джа-джа Бинг", Истина);
ХМЛДобавить(ХМЛ,"Сотрудник",, "Скайвокер", Истина);
ХМЛДобавить(ХМЛ,"Сотрудник",, "Чебурашка", Истина);
ХМЛЗаписать(ХМЛ,"c:\mydoc.xml");
ХМЛЗакрыть(ХМЛ);

Примеры чтения XML:

ХМЛ = ХМЛОткрыть("c:\mydoc1.xml");
Если ХМЛПрочитать(ХМЛ,"Сотрудник",Возвр) Тогда
    Сообщить(СтрокуИзВеб(Возвр["Содержание"]));
КонецЕсли;
ХМЛЗакрыть(ХМЛ);

ХМЛ = ХМЛОткрыть("c:\mydoc.xml");
Если ХМЛПрочитать(ХМЛ,"Организация",Возвр) Тогда
    СтрокаСотрудники = Возвр["Содержание"];
    Пока Истина Цикл
        Тег = Неопределено;
        Если ХМЛПрочитатьИзСтроки(СтрокаСотрудники,Тег,Возвр) Тогда
            Сообщить(Тег + ": " + СтрокуИзВеб(Возвр["Содержание"]));
        КонецЕсли;
    КонецЦикла;
КонецЕсли;
ХМЛЗакрыть(ХМЛ);

Пример построения дерева:

ХМЛ = ХМЛОткрыть("c:\mydoc.xml");
ХМЛРазобрать(ХМЛ,ДеревоОбработки);
ЭлементыФормы.ДеревоОбработки.СоздатьКолонки();
ХМЛЗакрыть(ХМЛ);

 


Обновил обработку. Добавил возможность выбора кодировки при чтении и записи файла. Также нашел примеры нестандартных XML, которые тоже теперь отрабатываются корректно.

Не отрабатывались XML без отдельного закрывающего тега. Такие XML - не есть канон. Но теперь и они нормально воспринимаются парсером.

***

Посмотрел-посмотрел на это чудо, добавил на форму командную панельку, привязал ее к дереву, а в состав методов прописал формирование XML-файла по структуре дерева. Вот и получился редактор. Теперь можно загрузить любой XML-файл, изменить в нем что-то в таблице дерева и сохранить снова в XML. При этом, можно перекодировать. Думаю, особо одаренные, кому эта тема интересна, могут добавить кучу разных полезностей. Например, чтобы можно было сразу добавлять что-то по данным из документов, реквизитов элементов справочника... Да мало ли что можно сделать, чтобы работать было быстро и удобно.

Обновление:

30.09.09 18:42 - Появилась полоса загрузки и парсится при построении дерева теперь в десятки тысяч раз быстрее. Исправил ошибку с кодировкой при записи.

30.09.09 19:17 - Исправил некорректную отработку специальных символов при парсинге

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме. Без существенных изменений типовой конфигурации. Проверено с брендами: Интеграция 1С и GEELY Интеграция 1С и HAVAL Интеграция 1С и KIA Интеграция 1С и FORD Интеграция 1С и LADA ГАРАНТИЯ 100% ВНЕДРЕНИЯ!

36000 руб.

03.08.2020    15655    9    17    

9

Модуль для обмена "1С:Предприятие 8. УАТ. ПРОФ" с FortMonitor

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    12809    30    8    

10

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17419    6    15    

13

[Расширение] БОР-Навигатор.Культура

Зарплата Бюджетный учет WEB-интеграция Обмен с ГосИС Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Расширение конфигурации, включающее в себя объекты, необходимые для подготовки и сдачи отчета "Штатная численность" системы "БОР-Навигатор.Культура" в программе "1С:Зарплата и кадры государственного учреждения", редакция 3.1.

8400 руб.

01.02.2019    25686    9    0    

7

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16253    41    49    

22
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Bambrlog 29.09.09 08:53 Сейчас в теме
2. I_G_O_R 69 29.09.09 09:17 Сейчас в теме
ну раз такая любовь, жду компилятор ;)
3. biv75 29.09.09 14:10 Сейчас в теме
Отличная вещь, на этапе отладки не заменима, поддерживаю (2)
4. elizarovs 83 29.09.09 15:01 Сейчас в теме
С собственно парсером понятно. Вопрос по форме, в смысле по ее функционалу. По скриншоту, вроде, при выборе файла в рабочем поле должна была раскрыться структура выбранного файла. С кодом подробно не разбирался пока, но несколько наугад выбранных файлов XML, в том числе выгруженный из 1С для обмена "по правилам", оставили окно пустым.
В модуле объекта в функции ХМЛПрочитать() (стр.183) при проверке
Если ХМЛ["Поз"]>ХМЛ["Текст"].КоличествоСтрок() Тогда
сразу оказывается, что ушли за конец документа
:cry:
5. Minotavrik 1634 29.09.09 17:21 Сейчас в теме
Как раз нужно, а то глаза режет уже xml теги глазками смотреть ;)
6. CheBurator 3119 29.09.09 18:11 Сейчас в теме
эээ не понял... народ угается на тормознутость мелкомягкого парсера, а парсер на 8-ке - он что БЫСТРЕЕ БУДЕТ??? или я не в теме?
7. CheBurator 3119 29.09.09 18:12 Сейчас в теме
или это просто смотрелка очередная..???
8. Поручик 4670 29.09.09 18:47 Сейчас в теме
Автор, а обработка-то рабочая? Перепробовал несколько разных файликов xml, окно тэгов пустое. Или ей какие-то особые файлы нужны?
9. awa 2602 29.09.09 18:56 Сейчас в теме
Странно не хотеть (не мочь, бояться) использовать типовые функции работы с xml (проверенные и оттестированные тысячами программистов), но при этом хотеть (мочь, не бояться) использовать "парсер от планета"...
Беглый взгляд на код, говорит о том, что обрабатываются только файлы в кодировке "windows-1251". Означает это только одно, что "парсер" очень сырой, и лично я боюсь его использовать.
10. CheBurator 3119 29.09.09 19:12 Сейчас в теме
есть хороший нормальный быстрый редактор эксемеля, написанный 1сником, есть разработки позволяющие посмотреть структуру иксемеля - то есть построить дерево используемых тегов
.
- а сабж - это что???
11. O-Planet 6431 29.09.09 21:31 Сейчас в теме
Отвечаю. Не тестировал на "неправильных" xml. Не знаю, какие "неправильные" xml бываю. Свой парсер использую при разных выгрузках/загрузках, когда нужно быстро сохранить в файл параметры настройки и потом их прочитать. Парсит документы следующей структуры:

<?xml ... ?>
<тег>
<тег>
...
</тег>
</тег>
<тег>
<тег>
...
</тег>
</тег>
...

Про windows-1251 не загружался. Выбор кодировки можно добавить парой строк. Но, думаю, не нужно. Если у кого-то что-то не отпарсило, то буду признателен за примеры xml в личку.

12. O-Planet 6431 29.09.09 21:31 Сейчас в теме
О как!!! Порезались теги ))
13. O-Planet 6431 30.09.09 01:37 Сейчас в теме
Обновил обработку. Добавил возможность выбора кодировки при чтении и записи файла. Также нашелпримеры нестандартных xml, которые тоже теперь отрабатываются корректно.

Не отрабатывались xml без отдельного закрывающего тега. Такие xml - не есть канон. Но теперь и они нормально воспринимаются парсером. Качайте.
14. O-Planet 6431 30.09.09 04:50 Сейчас в теме
Чой-то мну осенило... Добавил командную панельку на форму, привязал ее к дереву и получился xml-редактор. Разумеется, все, что наредактировано, можно снова записать в xml-файл.
15. Поручик 4670 30.09.09 11:14 Сейчас в теме
Лажа какая-то. Опять попробовал разные файлы, хрен эффекта.
16. O-Planet 6431 30.09.09 13:50 Сейчас в теме
(15) Действительно, лажа. Вышли хоть один. У меня все летает.
17. Поручик 4670 30.09.09 14:20 Сейчас в теме
Куда выслать? Напиши в приват.
19. O-Planet 6431 30.09.09 18:35 Сейчас в теме
(17) Твой файл просто грузится жутко медленно. И он - в UTF-8. Т.е., нужно выбирать кодировку. Вобщем, подумал немного, и кое-что там подправил. xml теперь парсится в ... десятки тысяч раз быстрее. (Видишь, как ты реально помог :) ) Качай, проверяй. Не забудь выбрать правильную кодировку. Смотри скрин. Там как раз твой файл с правилами.

Кстати, отключил автозагрузку файла при выборе. Нужно теперь жать кнопку в меню.

(18) Исправил.
21. Поручик 4670 30.09.09 18:47 Сейчас в теме
(19) вот теперь зачёт. :D
Особенно за скрин с названием нашей конторы. Пусть мои "друзья" знают, откуда я что беру.
23. O-Planet 6431 30.09.09 19:13 Сейчас в теме
(21) Убрать скрин с названием конторы? ))
18. Re:аниматор 338 30.09.09 17:34 Сейчас в теме
Создал в обработке файл, сохранил. кодировка UTF8 !
открываю через IE

Не удается отобразить страницу XML
Не удается просмотреть ввод XML с использованием списка стилей . Исправьте ошибку и затем нажмите кнопку "Обновить"или повторите попытку позднее.


--------------------------------------------------------------------------------

Переключение с текущей кодировки на указанную не поддерживается. Ошибка при обработке ресурса ''file:///C:/OBMEN/2.xml''. ...

<?xml version="1.0" encoding="windows-1251" ?>

20. O-Planet 6431 30.09.09 18:40 Сейчас в теме
Всем, кто скачал до этого момента, рекомендую скачать обновление.
Светлый ум; +1 Ответить
28. elizarovs 83 02.10.09 09:08 Сейчас в теме
(20) Ну, слава Богу! +. А то уж минусовать собирался )
22. O-Planet 6431 30.09.09 19:13 Сейчас в теме
+ еще поймал ошибку, связанную со специальными символами. Теперь полностью файл Поручика читает.
24. Поручик 4670 30.09.09 20:26 Сейчас в теме
зачем, пусть будет. бояться мне нечего.
25. O-Planet 6431 01.10.09 17:10 Сейчас в теме
Ы. А я убрал.

Хотел бы спросить тех, кто с аналогичными парсерами работал. Как оно по скорости? Удобству? Приемлемо?
26. Поручик 4670 01.10.09 17:39 Сейчас в теме
Я некоторое время плотно работал с
http://infostart.ru/public/15835/ - (вогнал в базу во внешние обработки)
http://infostart.ru/public/15464/

Эти быстрее, но с закрытым кодом. А по удобству почему-то ни один не устроил, постоянно переключался между ними.
27. O-Planet 6431 02.10.09 04:55 Сейчас в теме
(26) Ага. Посмотрел первый. Хороший. По ходу, использует функции среды, а не собственные.
29. strange2007 144 03.10.09 13:36 Сейчас в теме
Что-то ошибка при удалении элемента
{Форма.Форма(77)}: Ошибка при установке значения атрибута контекста (Теги): Выполнение операции невозможно, т.к. строка была удалена.
БылаСтрока["Теги"]=Редактор;
по причине:
Выполнение операции невозможно, т.к. строка была удалена.

Может что не так делаю?
30. O-Planet 6431 05.10.09 01:13 Сейчас в теме
31. Паро цёра 06.10.09 11:08 Сейчас в теме
// Открыть ХМЛ файл для чтения
// Возвращает переменную открытого файла (соответствие)
Функция ХМЛОткрыть(ИмяФайла,Знач Кодировка=Истина) Экспорт
	Если ТипЗнч(Кодировка)=Тип("Булево") Тогда
		Кодировка=КодировкаТекста.ANSI;
	КонецЕсли;	
	Текст=Новый ТекстовыйДокумент;
	Попытка
		Текст.Прочитать(ИмяФайла,Кодировка);
	Исключение
	    Возврат Неопределено;
	КонецПопытки;
	
	Кол		= Текст.КоличествоСтрок();
	П		= 0;
	Стр		= "";
	Ост		= "";
	Найд	= Ложь;
	Пока П < Кол Цикл
		П	= П + 1;
		Стр	= НРег(СокрЛП(Текст.ПолучитьСтроку(П)));
		Если Найти(Стр,"<?xml") <> 0 Тогда
			Найд	= Истина;
			Прервать;
		КонецЕсли;
	КонецЦикла;	
	Если Найд Тогда
		ПП=Найти(Стр,"?>");
		Если ПП>0 Тогда
			Ост=Сред(Стр,ПП+2);
		Иначе
			Ост="";
		КонецЕсли;
	Иначе
		П = 0;//в выгрузках правил из КД 2.0 например именно этот случай
	КонецЕсли;	
	
	ХМЛ=Новый Соответствие;
	ХМЛ.Вставить("Текст",Текст);
	ХМЛ.Вставить("КоличествоСтрок",Текст.КоличествоСтрок());
	ХМЛ.Вставить("Режим","Чтение");
	ХМЛ.Вставить("КонецФайла",Ложь);
	ХМЛ.Вставить("Поз",П);
	ХМЛ.Вставить("__ОстатокСтроки",Ост);
	ХМЛ.Вставить("__Читать",(П<=Кол));
	Возврат ХМЛ;
КонецФункции	
Показать


так лучше
32. tormozit 7132 08.10.09 14:20 Сейчас в теме
А че на файл то все заточено? А ежели у меня строка?)
33. lame 70 15.10.09 04:09 Сейчас в теме
ну у меня не хотит разбирать мой хмл ... вот структура

<?xml version="1.0" encoding="windows-1251"?>
<jcanswer>
<message>
<result >SUCCESS</result >
Код
N0407_BILLING_SUCCESS
Показать полностью

<action >detail</action >
<group id="billing" area="none"><![CDATA[Обработка данных биллинга]]></group >
<datetime >2009-10-14 18:05:44</datetime >
<text ><![CDATA[Данные о возможности проведения операции получены]]></text >
<techinfo >
<summary>
<parts>
<free>
<count>0</count >
<atom_cost>0</atom_cost >
<cost>0</cost >
</free>
<cash>
<count>100</count >
<atom_cost>0.525</atom_cost >
<cost>52.5</cost >
</cash>
</parts>
</summary>
<result>1</result >
<posible>yes</posible >
<cost>52.5</cost >
<currency_id>4</currency_id >
</techinfo >
</message>
</jcanswer>
34. Паро цёра 16.10.09 16:04 Сейчас в теме
CDATA, Comment, Processing Instruction - не обрабатывает.
35. Модератор раздела 19.02.12 18:12 Сейчас в теме
Подниму тему.
С ХМЛ работаю редко, поэтому единого кода нет :(
Для текущей задачи решил воспользоваться сабжем и на некоторых файлах получил ошибки.
Например, для файлов со слешем внутри значения (пример)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<N P="1/2">
</N>
будет выдано значение P, равное 12, т.е. неверное, должно быть 1/2
или для другого файла (пример)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<L>
<M>
<N P="1/2">
</N>
</M>
</L>
вообще узел N не будет показан.
Я показал упрощенные простейшие файлы, в реальности пришлось разбираться с большими файлами, отсекая лишнее и получая простейшие тестовые файлы.
Внес исправления в обработку для исправления последнего бага.
Если кому-нибудь нужно, могу выложить свою версию.

ЗЫ а вообще кто какими-программными средствами пользуется для программного разбора хмл-файлов?
есть ли еще какие-то обработки с открытым кодом, которые собирают дерево 1С из хмл-файла?
37. AlexO 135 15.06.12 11:38 Сейчас в теме
(35) artbear,
есть ли еще какие-то обработки с открытым кодом, которые собирают дерево 1С из хмл-файла?

есть.
У гения1С есть разработка "Сборка-разборка XML", собирает в дерево - но она не работает с большими файлами.
Вообще, на инфострате нет даже "просто посмотреть XML" достаточно законченных разработок по XML - все сыроваты.
Сам пользуюсь разработкой с другого ресурса.
Но все это - никак не работает с данными, содержащимся в XML, поэтому для поиска (а во многих и поиска-то никакого нет) и обработки ошибок все эти вьюверы бесполезны.
36. sbv2005 347 15.06.12 11:22 Сейчас в теме
Файл так и не показывается в поле ... (( Почти минус
38. AlexO 135 15.06.12 11:40 Сейчас в теме
(36) sbv2005,
по-моему, это вы рекомендовали там что-то из SQL использовать для обоработки XML... из IBM разработок...
так что - ждем подробного отчета :)
39. sbv2005 347 16.06.12 12:23 Сейчас в теме
(38) Или вы меня с кем то путаете, или можно поподробней.
40. gull22 95 22.01.15 14:16 Сейчас в теме
Конвертировал под 8.2.Запустил в Комплексной конфигурации,попытался исправить значение. Поправить то поправил,но вот сохранить не удалось.Значок записи изменений не активен.
41. Жернов Виктор 7 16.11.17 10:32 Сейчас в теме
Хорошая вещь. Молодец. Конвертировал в 8.3. Работает.
42. WKBAPKA 214 20.04.18 15:20 Сейчас в теме
Скормил один файлjavascript:void(0);, закрывающий тег ищет до не приличия долго :(
43. Natalia 257 03.05.23 19:31 Сейчас в теме
Похоже, что парсятся только файлы очень простой структуры.
Потому оказалось бесполезным.
Алгоритм действий на инфостарте обычный -
1) найти подходящее по описанию
2) скачать и понять, что программист заленился.
3) махнуть рукой и сделать самостоятельно.
Перехожу к п.3
Оставьте свое сообщение