1. Vallerikk 20.07.18 11:10 Сейчас в теме
Добрый день всем!
Недавно столкнулся вроде бы с простой задачей, из готового xml (стороннего разработчика) затянуть данные в 1С.
До этого с этим типом файлов в 1С не работал, побегал по статьям на этом форуме и не только, так и не нашел ответа на свой вопрос.


Дело вот в чем, я не стал построчно читать данные с помощью объекта ЧтениеXML, а сразу решил идти в сторону XDTO.

Создал свой пакет, получил данные

	
        ЧтениеФайла = Новый ЧтениеТекста(ПолноеИмяФайла,КодировкаТекста.UTF8);
	СтрокаXML = ЧтениеФайла.Прочитать();
	
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(СтрокаXML);
	
	РезультатРабора = Новый Массив;
	
	ТипДанныеФайла = ФабрикаXDTO.Тип(ИмяПространстваИмен, ИмяСвойства);
	
	ДанныеФайла = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ТипДанныеФайла);
Показать


Все данные получаю, кроме таких (param),
<offers>
<offer id="162129">
<name>а/ш 235/65*17 V Scorpion Verde (108) XL Pirelli TBL</name>
<param name="Артикул">01171212</param>
<param name="Артикул производителя">1805900</param>
<param name="Ширина протектора">235</param>
<param name="Высота профиля">65</param>
<param name="Технология безопасности">Стандарт</param>
<param name="Дополнительные свойства">XL</param>
<param name="Цена">6598</param>
</offer>
</offers>

и не пойму как их получить с помощью XDTO.
Буду признателен за помощь или направление в поиске.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Xershi 1483 20.07.18 13:27 Сейчас в теме
(1) табличная часть делается как строка, а затем строка похожа на структуру. Посмотри как в типовых делают.
2. user774630 20.07.18 13:06 Сейчас в теме
Непонятно вот что. У вас есть только XML и больше ничего? Универсальный обмен с помощью XML возможен при соблюдении трех условий:
1. есть файл данных
2. есть схема XML
3. известно URI пространства имен, используемых при обмене

Как без схемы XML вы понимаете, где что находится?
<param name="Цена">6598</param>

Это что? Рубли? А может тугрики? А может, это шестнадцатеричная система?
4. Xershi 1483 20.07.18 13:29 Сейчас в теме
(2) валюта может быть выше уровнем.
6. user774630 20.07.18 13:35 Сейчас в теме
(4) вы же поняли о чем я. Может быть, может не быть, но в обмене схема должна быть. А если есть схема - ее можно импортировать как пакет XDTO, ну или подключить к фабрике XDTO. И в итоге получить данные с нормальными типами. А от такого чтения, когда есть вроде и объект, но все типы строковые - как-то мало смысла...
7. Xershi 1483 20.07.18 13:45 Сейчас в теме
(6) согласен, автор хочет свой велосипед написать. А в случае изменений файла поиметь геморой с пакетами.
user774630; +1 Ответить
8. user774630 20.07.18 13:47 Сейчас в теме
(7)
не ну совсем...
(стороннего разработчика) затянуть данные в 1С.

т.е. автору дали файл формата XML и сказали что-то типа "вот файл универсального прогрессивного формата обмена, внутри есть всё что нам нужно, загрузи в 1С".

Автор, проси схему XML и выкладывай файл XML вместе со схемой XML :)
5. Xershi 1483 20.07.18 13:30 Сейчас в теме
(2) 2 и 3 он решил сам реализовать и не понимает как это делается.
9. Vallerikk 20.07.18 14:43 Сейчас в теме
Схему просил, говорят, что заполняют без схемы, хотя в заголовке файла присутствует это:
<!DO CTYPE yml_catalog SYSTEM "shops.dtd">
но все типы строковые - как-то мало смысла...

согласен, есть задача, в которой нет объектных данных (грубо говоря), но хотелось бы решить ее с помощью пакета XDTO,
как говорится век живи, век учись :)


А в случае изменений файла поиметь геморой с пакетами.


Нет, гемор никому нормальному не нужен, данные только читаются и обрабатываются.

По поводу типов я не волнуюсь, мне не нужна десериализация, все типы это строка, дата, число (стандартные).

Ребят, offer это номенклатура, id как атрибут я получаю, дальше идет элемент name я его тоже получаю, а вот дальше...

param - это что-то типа дополнительный реквизит, атрибут name - это его название, ну и соответственно значение

находится перед закрывающимся тэгом.
10. leemuar 23.07.18 12:45 Сейчас в теме
(9) Вы можете прочитать XML в XDTO и без схемы, схема лишь существенно облегчит чтение спорных моментов (например, списков). И читайте напрямую из файла, нет смысла читать содержимое в память:

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(СтрокаXML);
    
ДанныеФайла = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
// в ДанныеФайла нетипизированный XDTO со всем содержимым файла


А еще лучше создайте схему для себя. dtd довольно ограниченная и устаревшая технология описания структуры xml
11. leemuar 23.07.18 12:53 Сейчас в теме
(9) в случае чтения в XDTO param у вас будет типа СписокXDTO. Сделаете по нему цикл и по имена атрибутов вытащите нужные вам значения
12. vis_tmp 32 06.08.20 07:40 Сейчас в теме
(11)А если в файле только один параметр?
Например "<param name="Артикул">01171212</param>".
Тогда будет не "СписокXDTO", а "ОъектXDTO"...
Как в таком случае получить имя и значение параметра?
13. vis_tmp 32 06.08.20 08:06 Сейчас в теме
(12)Нашёл.
Значение получается через "ОъектXDTO.Последовательность().ПолучитьТекст(0)".
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот