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 разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    15746    10    17    

11

Интеграция 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    17548    6    15    

13

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

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

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

12000 руб.

02.02.2021    16359    42    49    

23

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

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

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

8400 руб.

01.02.2019    25741    9    0    

7

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

Обмен с ГосИС WEB-интеграция Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    88579    160    215    

318
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
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 7136 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
Оставьте свое сообщение