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

05.10.09

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
ХМЛ-Парсер
.zip 27,92Kb
683
683 Скачать (1 SM) Купить за 1 850 руб.

Не спрашивайте, чем плохи стандартные методы работы с 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 - Исправил некорректную отработку специальных символов при парсинге

См. также

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

Онлайн-заказ - это решение для автоматизации процесса оформления заказов на сайте в торговых организациях. Продукт обеспечивает легкое взаимодействие между компанией и клиентами через веб-интерфейс, интегрированный с 1С:Предприятие. Система позволяет снизить операционные расходы, повысить лояльность клиентов и оптимизировать работу отдела продаж.

57600 руб.

26.11.2024    1583    1    1    

4

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

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    18580    20    22    

18

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

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23): 1С:Управление торговлей, 1С:Управление Нашей фирмой 3, 1С:Комплексная автоматизация 2, Объединенное решение: Модуль 1С:CRM 3 (3.0.21.3) +1С:ERP Управление предприятием 2. При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

7200 руб.

04.05.2021    20732    13    19    

18

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

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

14400 руб.

20.12.2024    492    2    0    

5

Обмен с ГосИС 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    92217    184    217    

337
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 1644 29.09.09 17:21 Сейчас в теме
Как раз нужно, а то глаза режет уже xml теги глазками смотреть ;)
6. CheBurator 2695 29.09.09 18:11 Сейчас в теме
эээ не понял... народ угается на тормознутость мелкомягкого парсера, а парсер на 8-ке - он что БЫСТРЕЕ БУДЕТ??? или я не в теме?
7. CheBurator 2695 29.09.09 18:12 Сейчас в теме
или это просто смотрелка очередная..???
8. Поручик 4661 29.09.09 18:47 Сейчас в теме
Автор, а обработка-то рабочая? Перепробовал несколько разных файликов xml, окно тэгов пустое. Или ей какие-то особые файлы нужны?
9. awa 2612 29.09.09 18:56 Сейчас в теме
Странно не хотеть (не мочь, бояться) использовать типовые функции работы с xml (проверенные и оттестированные тысячами программистов), но при этом хотеть (мочь, не бояться) использовать "парсер от планета"...
Беглый взгляд на код, говорит о том, что обрабатываются только файлы в кодировке "windows-1251". Означает это только одно, что "парсер" очень сырой, и лично я боюсь его использовать.
10. CheBurator 2695 29.09.09 19:12 Сейчас в теме
есть хороший нормальный быстрый редактор эксемеля, написанный 1сником, есть разработки позволяющие посмотреть структуру иксемеля - то есть построить дерево используемых тегов
.
- а сабж - это что???
11. O-Planet 6453 29.09.09 21:31 Сейчас в теме
Отвечаю. Не тестировал на "неправильных" xml. Не знаю, какие "неправильные" xml бываю. Свой парсер использую при разных выгрузках/загрузках, когда нужно быстро сохранить в файл параметры настройки и потом их прочитать. Парсит документы следующей структуры:

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

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

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

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

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

(18) Исправил.
21. Поручик 4661 30.09.09 18:47 Сейчас в теме
(19) вот теперь зачёт. :D
Особенно за скрин с названием нашей конторы. Пусть мои "друзья" знают, откуда я что беру.
23. O-Planet 6453 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 6453 30.09.09 18:40 Сейчас в теме
Всем, кто скачал до этого момента, рекомендую скачать обновление.
Светлый ум; +1 Ответить
28. elizarovs 83 02.10.09 09:08 Сейчас в теме
(20) Ну, слава Богу! +. А то уж минусовать собирался )
22. O-Planet 6453 30.09.09 19:13 Сейчас в теме
+ еще поймал ошибку, связанную со специальными символами. Теперь полностью файл Поручика читает.
24. Поручик 4661 30.09.09 20:26 Сейчас в теме
зачем, пусть будет. бояться мне нечего.
25. O-Planet 6453 01.10.09 17:10 Сейчас в теме
Ы. А я убрал.

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

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

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


так лучше
32. tormozit 7250 08.10.09 14:20 Сейчас в теме
А че на файл то все заточено? А ежели у меня строка?)
33. lame 75 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 136 15.06.12 11:38 Сейчас в теме
(35) artbear,
есть ли еще какие-то обработки с открытым кодом, которые собирают дерево 1С из хмл-файла?

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