0. majmyl 236 29.01.14 15:00 Сейчас в теме

Пророк в своем отечестве или Читаем XML с помощью XDTO

Проходи, садись поудобнее и приготовься внимать мне. Сейчас я предскажу твое будущее… В этом пакете я описываю схему XML… Вы можете видеть, что код очень прост, и никакого преобразования элементов прочитанного XML не требуется…

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. davdykin 22 29.01.14 20:36 Сейчас в теме
Спасибо за статью. Действительно удобный механизм, и пару моментов для себя узнал новых.
user887351; jif; Мах; VzhenyaV; veiuper; check2; vz1987; MikeI; Chif13; rosinfo1; Makushimo; slavap; cleaner_it; rayastar; shalimski; +15 Ответить
2. Angeros 30.01.14 07:18 Сейчас в теме
Если механизм чтения xml через xdto позволяет читать его без схемы, возможна ли автоматическая генерация xsd схемы, хотя-бы в той части где стандартный механизм справился с чтением данных.?
3. Angeros 30.01.14 07:26 Сейчас в теме
Как будет читаться вот такой хмл?

...
<students>
<student>
<Name>Alex</student>
<sex>male</sex>
<date>2000-01-01</date>
<weighting unitOfMeasure="kg">70</weighting>
<Age>23</Age>
</student>
...
<students>
...
Показать


особенно строка <weighting unitOfMeasure="kg">70</weighting> в xdto уменя с такой строкой были трудности.
Она читалась, но число 70 не читалось.
7. kasper076 49 30.01.14 10:17 Сейчас в теме
(3) Angeros, есть такая беда. Если в узле присутствует атрибут и значение, то значение не читается.
10. John_d 2268 30.01.14 11:03 Сейчас в теме
(3) Angeros,
в ней ошибка:
<weighting unitOfMeasure=\"kg\">70</weighting>

правильно
<weighting unitOfMeasure="\kg\">70</weighting>
11. Angeros 30.01.14 12:04 Сейчас в теме
(10) John_d, Редактор инфостарта нерасчитан на публикацию текста xml у меня в редакторе все правильно написано, отображается чехорда. По этой причине автор выложил примеры хмл в виде изображений.
4. mrmasson 53 30.01.14 08:50 Сейчас в теме
Спасибо за статью! Удобно для начинающих рассматривать xdto. Самое главное все последовательно - от простого к сложному!
5. StaticUnsafe 30.01.14 09:10 Сейчас в теме
Яростно плюсую. Спасибо за ликбез!
6. Поручик 4375 30.01.14 10:14 Сейчас в теме
Очередная неплохая статья по XDTO.
8. fishca 1170 30.01.14 10:23 Сейчас в теме
Статья годная!!! Спасибо!!!
9. John_d 2268 30.01.14 11:01 Сейчас в теме
Отличная статья, Спасибо!
12. Swetlana 10 30.01.14 15:19 Сейчас в теме
Хорошая статья, надо будет изучить.
13. SinglCOOLer 210 30.01.14 15:27 Сейчас в теме
сначала было не хотел читать, но начал читать и втянулся, все круто описано, очень познавательно, спасибо
14. vasko88 4 30.01.14 19:02 Сейчас в теме
Спасибо, действительно грамотно и просто описано как работать с пакетам xdto
15. Evil Beaver 6645 31.01.14 00:36 Сейчас в теме
Пардон, не смог дочитать из-за вычурного стиля повествования. Выпендреж. Готов поверить коллегам, что статья годная.
16. EarlyBird 6 31.01.14 05:02 Сейчас в теме
17. JusteRU 31.01.14 05:10 Сейчас в теме
Спасибо! Очень интересная статья про ещё неизведанную часть 1С. А программно нельзя эти схемы формировать можно?
19. Alex1Cnic 125 31.01.14 08:48 Сейчас в теме
(17) JusteRU,
Присоединяюсь :А программно нельзя эти схемы формировать можно?
20. headMade 142 31.01.14 10:14 Сейчас в теме
21. Evil Beaver 6645 31.01.14 11:40 Сейчас в теме
(20) headMade, (19) Alex1Cnic, ну тогда и я отрекламируюсь, читайте тут:
http://infostart.ru/public/167459/
18. srv80 9 31.01.14 06:17 Сейчас в теме
Прочитать XML действительно не проблема с помощью XDTO, но сформировать XML по XDTO, который можно передать в качестве SOAP запроса на веб-сервер ... вот тут борода, которую пришлось решать через DCOM объект и таким кривым образом, что даже публиковать смешно )
53. blackschool 18 03.06.16 17:25 Сейчас в теме
(18) srv80, такую задачу можно решить, собирая текст soap-запроса конкатенацией шапки, подвала и текста XML, полученного из XDTO. Криво, но достаточно устойчиво работает, поскольку шапка и подвал универсальны.
22. rozer 264 31.01.14 12:52 Сейчас в теме
Молодца... и не сухо а с юмором :)
23. kiruha 383 31.01.14 12:56 Сейчас в теме
Нифига не понял, зачем, чтобы прочитать простой XML файл нужно менять конфигурацию и вводить новые объекты.
Без программного создания интересно только в познавательных целях

32. Alex_1066 04.02.14 17:19 Сейчас в теме
(23) А можно и поделиться с товарищами, и рассказать про ещё один вариант чтения (без изменения конфигурации). Я думаю всем будет интересно.
24. Makushimo 155 31.01.14 13:05 Сейчас в теме
Просто, легко и доступно.
Стиль изложения поднял настроение -))
25. glek 112 31.01.14 17:10 Сейчас в теме
Хорошая статья, спасибо. Ставлю в закладки.
26. rosinfo1 31.01.14 17:59 Сейчас в теме
Спасибо за статью, пол года назад потратил огромную кучу времени, пока понял что такое XDTO, и как его к веб-сервису прикрутить. Т.к документация в желтой книжке написана для людей которые понимают, что это такое, а не для таких как я ))
27. KliMich 31.01.14 18:19 Сейчас в теме
Сбасибо! Надо обязательно попробовать .
28. so-quest 130 02.02.14 16:56 Сейчас в теме
вот еще бы автор показал как namespace вставлять автоматом в те xml что присылают (руками то да, можно... но если файлов штук 500? если namespace'ов тоже больше 1? )...

Не качал конечно конфигу - но мои пять копеек чисто по статье
1. Пол может принимать любое строковое значение. Не всегда корректно. Потравив в статье пару абзацев можно было показать такой механизм как ограничения (ввести тип который принимает 2 значения "мужской" и "женский")
2. Нет примера записи
3. Нет примера создания схемы на лету (не всегда можно в конфигурацию встроить объект)
4. Нет примера на использование базового типа.
5. О типе число сказано вскользь, а ведь их несколько - на каждом свое ограничение.
Lacoste4life; check2; gingerale; SirYozha; kasper076; via; kiruha; Evil Beaver; kostas; +9 Ответить
30. headMade 142 03.02.14 15:04 Сейчас в теме
(28) so-quest,
ну так может у вас есть желание дать ответ на ваши вопросы в виде коментария или в виде статьи ????
29. qwed557 30 03.02.14 05:26 Сейчас в теме
отличная статья, надо подробно все изучить, и жизнь наладиться ))), еще бы для 7.7 такие фишки были бы, или они есть?
Прикрепленные файлы:
31. so-quest 130 03.02.14 17:12 Сейчас в теме
по 2,3,4 - напишу как нибудь, там ничего сложного, просто тупо пересказать СП
по 1 - лениво делать скриншоты
по 5 - читать http://www.ozon.ru/context/detail/id/7410082/ Слишком большая тема, в 1 статье ну никак не осветить
33. Alex_1066 04.02.14 17:20 Сейчас в теме
Статья хоршая, для начала.... Продолжение не помешало бы с учетом оговорок, данных читателями статьи в комментариях... Спасибо.
34. so-quest 130 04.02.14 21:14 Сейчас в теме
Анонс :)
Следите за новыми публикациями :)
Сейчас пройдет модерацию и сразу -

Построение XSD схемы на лету или любите СП источник знаний

В статье показаны 2 простых варианта создания схемы «на лету».
Приведенный код не следует рассматривать как законченное решение, скорее как расширеннее для синтаксис-помощника.
Код приводиться «как есть», я не несу никакой ответственности если что-то у вас поломается или пойдет не так.

Вариант №1
Используется СоздатьФабрикуXDTO. В архиве файл Вариант-1.epf

Вариант 2
Используется конструктор для ФабрикаXDTO В архиве файл Вариант-2.epf

Есть еще вариант №3 – основан на построении схемы – но мне этот вариант никогда был не интересен, поэтому оставим его добровольцам.
35. МимохожийОднако 130 05.02.14 07:48 Сейчас в теме
36. so-quest 130 05.02.14 11:15 Сейчас в теме
ответ на вопрос - как создавать фабрику на лету. Теперь не нужно насиловать конфигурацию, встраивая пакеты.

http://infostart.ru/public/256028/
37. kiruha 383 05.02.14 11:34 Сейчас в теме
(36)
Скооперировались бы с автором ))
Чтобы в одной статье все
38. help1Ckr 05.02.14 11:40 Сейчас в теме
Спасибо огромное за статью! Как раз мучаюсь с xml. Для мну это темный лес(
39. Yashazz 3128 09.02.14 13:48 Сейчас в теме
Ну, баянненько и попсовенько, трёпа много и толка маловато, но для совсем начинающих сгодится. Особенно для тех, кому встроенную справку 1С читать лень.

Если хотите действительно серьёзный подход - читайте статьи от Evil Beaver, рекомендую.

Автор, можешь подробно рассказать о создании xsd "с нуля" на основе объектов платформы? Хочу, понимаешь, все типы и фасеты описать, да чтоб программно. И ещё нужна статья о разнице в понимании схем для 1С и нормальных xsd-схем, или "почему 1С не читает валидные схемы".
И, до кучи, расскажи о работе с XPath :)

А то, понимаешь, "пророка" тут изображает, азы пересказывая...
Infactum; +1 Ответить
40. Peka 12.02.14 15:52 Сейчас в теме
Как прочитать? Можно с помощью объекта «ЧтениеXML», но тогда нужно будет построчно обрабатывать документ. И хорошо если уровней вложенности всего лишь 2-3. А если их 10.


Сделал загрузку и выгрузку документа через ЧтениеXML и ЗаписьXML в результате появился XML файл:
<DocumentObject.ЗаказКлиента>
	<Ref>db7359f0-065d-11e3-bb9e-f0def1177243</Ref>
	<DeletionMark>false</DeletionMark>
	<Date>2013-08-16T17:23:55</Date>
	<Number>000000001</Number>
	<Posted>false</Posted>
	<Клиент>70038ad4-0613-11e3-8b3a-f0def1177243</Клиент>
	<Склад>d1464cbc-0612-11e3-8b3a-f0def1177243</Склад>
	<Товары>
		<Row>
			<Товар>6ca1f6db-0615-11e3-8b3a-f0def1177243</Товар>
			<Количество>2</Количество>
			<Цена>5000</Цена>
			<Сумма>10000</Сумма>
		</Row>
	</Товары>
</DocumentObject.ЗаказКлиента>
Показать

и как результат вопрос: А есть механизм, который позволит проставить соответствие тегов при загрузке XML файла ?
42. so-quest 130 13.02.14 11:44 Сейчас в теме
(40) http://infostart.ru/public/256836/
(41) "ресурсы кушает меньше" - это такая шутка? DOM вообще-то в памяти разворачивается. И с точки зрения потребления памяти ЧтениеXML - выгодней. Или у вас какой-то специфический DOM?
В заголовке статьи говориться про XDTO, поэтому к вашему "очень удобен" - пример когда DOM контролирует тип и отвечает на вопрос - соответствует xml схеме или нет - можете привести? Думаю с вашим опытом это не составит труда.
43. Yashazz 3128 13.02.14 14:58 Сейчас в теме
(42) Я не про ЧтениеXML. Я про СписокXDTO и прочая, взятые через сериализатор, каковые более жадны, чем построитель и его вторичные выборки.
А что касается проверки, то это вы про ЧтениеХМЛ.ОткрытьФайл, который проверяет согласно набору схем? Вообще хороший вопрос, навскидку не отвечу, надо ещё поискать. Но, думаю, есть ходы.
41. Yashazz 3128 12.02.14 16:47 Сейчас в теме
Кстати, маленькая подсказка тем, кто не желает мучиться с обходами по ЧтениеXML - есть такая хорошая штука "ПостроительDOM". Работает быстро, ресурсы кушает меньше, чем любые коллекции XDTO, и вообще очень удобен.
47. Evil Beaver 6645 17.02.14 10:26 Сейчас в теме
(41) Yashazz, какие это ресурсы DOM кушает меньше?
44. so-quest 130 13.02.14 16:46 Сейчас в теме
Это плата за типизацию и верификацию. Если не нужны такие навороты - не используй схемы. там уже всякие xpath или xslt
45. so-quest 130 13.02.14 16:50 Сейчас в теме
там уже всякие xpath или xslt начинают рулить.
46. Zero_nv 126 17.02.14 08:15 Сейчас в теме
Обновите в статье картинки плиз.
48. CheBurator 3410 18.02.14 23:27 Сейчас в теме
ну да.. понятно, что вопросамы о потребляемых ресурсах - это не наш путь...
49. malikov_pro 20.02.14 19:05 Сейчас в теме
автору спс, мои 5 коп по теме

Имеем файл XML в 200 МБайт с не регламентированной структурой, платформа 8.3 (в БП 3.0 гружу),
при загрузке чз XDTO +1,5 ГБ ОЗУ, работает стабильно, при DOM за +2ГБ, 1 раз с ошибкой вылетел.
При этом в XDTO не самый удобный интерфейс при работе с 0-1 (может значение быть а может и не быть).

Решил задачу загрузкой отдельных элементов в структуру + ТЗ и её обработку (памяти на порядок меньше расходуется).

&НаСервере
Функция ЗначенияXMLВСтруктуру(ЧитатьXML, ИмяРодителя, НеЧитать=Ложь) 
// НеЧитать - это если уже в элемент структуры провалился
	Структура = Новый Структура;
	Ключ = "";
	Значение = "";
	Пока ЕстьЧтоЧитать(НеЧитать) Цикл
		///
		Если ЧитатьXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
			Ключ = ЧитатьXML.Имя;
			ЧитатьXML.Прочитать();
			Если ЧитатьXML.ТипУзла = ТипУзлаXML.Текст Тогда
				Структура.Вставить(Ключ,ЧитатьXML.Значение);
			ИначеЕсли ЧитатьXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
				
				СтруктураВременная = ЗначенияXMLВСтруктуру(ЧитатьXML, Ключ, Истина);
				Если Структура.Свойство(Ключ,Значение) Тогда
					Если ТипЗнч(Значение) = Тип("Структура") Тогда
						ТЗ = ТаблицаЗначенийИзСтруктуры(Значение);
						ТЗ = ДобавитьСтруктуруКакСтрокуТЗ(ТЗ, СтруктураВременная);
					ИначеЕсли ТипЗнч(Значение) = Тип("ТаблицаЗначений") Тогда
						ТЗ = ДобавитьСтруктуруКакСтрокуТЗ(Значение, СтруктураВременная);					
					КонецЕсли;
					Структура.Вставить(Ключ, ТЗ);
				Иначе
					Структура.Вставить(Ключ, СтруктураВременная);
				КонецЕсли;
			КонецЕсли;
		ИначеЕсли (ЧитатьXML.Имя = ИмяРодителя) и (ЧитатьXML.ТипУзла = ТипУзлаXML.КонецЭлемента) Тогда
			Возврат Структура;
		КонецЕсли;
		////
		НеЧитать = Ложь;
	КонецЦикла;
Возврат Структура;
КонецФункции

&НаСервере
Функция ТаблицаЗначенийИзСтруктуры(Структура)
	ТЗ = Новый ТаблицаЗначений;
	Для каждого Строка Из Структура Цикл
		ТЗ.Колонки.Добавить(Строка.Ключ);
	КонецЦикла;
	
	ТЗ = ДобавитьСтруктуруКакСтрокуТЗ(ТЗ, Структура);
	
	Возврат ТЗ;
	
КонецФункции

&НаСервере
Функция ДобавитьСтруктуруКакСтрокуТЗ(ТЗ, Структура)
	
	СтрТЗ = ТЗ.Добавить();
	Для каждого Строка Из Структура Цикл
		Попытка
			СтрТЗ[Строка.Ключ] = Строка.Значение;	
		Исключение
			ТЗ.Колонки.Добавить(Строка.Ключ);
			СтрТЗ[Строка.Ключ] = Строка.Значение;
		КонецПопытки;
		
	КонецЦикла;
	
	Возврат ТЗ;
КонецФункции

&НаСервере
Функция ЕстьЧтоЧитать(Флаг)
	
	Если Флаг Тогда
		Возврат(Истина);
	КонецЕсли; 
	
	Если ЧитатьXML.Прочитать() Тогда
		Возврат(Истина);
	Иначе
		//Предупреждение("Файл прочитан полностью!");
	    Возврат(Ложь);
	КонецЕсли;
КонецФункции


Показать


проверку на значение 0-1 организовал
Если Структура.Свойство("type",Значение) И Значение = "у" Тогда
52. d0dger 81 28.02.14 12:52 Сейчас в теме
(49) угу, тоже делал подобное в дерево структур
51. so-quest 130 20.02.14 21:39 Сейчас в теме
для проверки на 0-1 проще добавить в схему предопределеное значение. или развести на 2 разных типа.
54. Lacoste4life 11.08.19 20:27 Сейчас в теме
Огромное спасибо автору данной статьи! Единственная статья, по которой у меня получилось с нуля создать пакет и считать XML файл! Браво!
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Программист 1С
Новосибирск
зарплата от 30 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 100 000 руб. до 150 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Специалист внедрения и сопровождения 1С
Москва
зарплата от 80 000 руб.
Полный день