|
XML обход средствами 1С | ☑ | ||
---|---|---|---|---|
0
Ilqarupup
09.02.17
✎
09:07
|
Доброго дня всем!
Есть такая структура хмл: <?xml version="1.0" encoding="UTF-8"?> <Корневой xmlns:v8="http://v8.1c.ru/data" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema- instance"> <CatalogObject.Номенклатура.Вручную> <Ref xmlns="" xsi:type="CatalogRef.Номенклатура">503e93a3-d943-11df-b606-001617c01d7d</Ref> <IsFolder xsi:type="xsd:boolean">false</IsFolder> <Parent xmlns="" xsi:type="CatalogRef.Номенклатура">503e93a2-d943-11df-b606-001617c01d7d</Parent> <Code xsi:type="xsd:string">000000006</Code> <Description xsi:type="xsd:string">Чайник</Description> <ЗакупочнаяЦена xsi:type="xsd:decimal">2000</ЗакупочнаяЦена> <ЕдиницаИзмерения xsi:type="xsd:string"/> <Картинка xsi:type="v8:ValueStorage">AQEIAAAAAAAAAO+7v3siVSJ9</Картинка> <ПолноеНаименование xsi:type="xsd:string">3rtertrrtgrg</ПолноеНаименование> </CatalogObject.Номенклатура.Вручную> <CatalogObject.Номенклатура.Вручную> <Ref xmlns="" xsi:type="CatalogRef.Номенклатура">503e93a4-d943-11df-b606-001617c01d7d</Ref> <IsFolder xsi:type="xsd:boolean">false</IsFolder> <Parent xmlns="" xsi:type="CatalogRef.Номенклатура">503e93a2-d943-11df-b606-001617c01d7d</Parent> <Code xsi:type="xsd:string">000000007</Code> <Description xsi:type="xsd:string">Фен</Description> <ЗакупочнаяЦена xsi:type="xsd:decimal">1800</ЗакупочнаяЦена> <ЕдиницаИзмерения xsi:type="xsd:string">шт</ЕдиницаИзмерения> <Картинка xsi:type="v8:ValueStorage">AQEIAAAAAAAAAO+7v3siVSJ9</Картинка> <ПолноеНаименование xsi:type="xsd:string"/> </CatalogObject.Номенклатура.Вручную> </Корневой> столкнулся с проблемой, что методы объекта Чтение= Новый ЧтениеXML; ЧтениеХМЛ.Прочитать(); и НоменклатураСсылка=ПрочитатьXML(ЧтениеХМЛ); "не видят" узлы <Ref xmlns="" xsi:type="CatalogRef.Номенклатура">503e93a3-d943-11df-b606-001617c01d7d</Ref> <Parent xmlns="" xsi:type="CatalogRef.Номенклатура">503e93a2-d943-11df-b606-001617c01d7d</Parent> грешу на пустые значения xmlns="", но хмл полностью совпадает с той чт о в книге "Технологии Интеграции" 2011 года, может в платформе что-то изменилось? У меня платформа 8.3, в книге 8.2. |
|||
1
Лефмихалыч
09.02.17
✎
09:08
|
что значит "не видят"?
|
|||
2
Ilqarupup
09.02.17
✎
09:10
|
(1) в отладке при чтении сразу переходит на IsFolder, потом Code , Description и так далее, Реф и Парента как будто и нет. Поэтому и ошибки в коде выходят
|
|||
3
Ilqarupup
09.02.17
✎
09:10
|
код чтения
Если ЧтениеХМЛ.ТипУзла <> ТипУзлаXML.НачалоЭлемента тогда ВызватьИсключение "Ошибка чтения ХМЛ"; КонецЕсли; ЧтениеХМЛ.Прочитать(); НоменклатураСсылка=ПрочитатьXML(ЧтениеХМЛ); Если ТипЗнч(НоменклатураСсылка) <> Тип("СправочникСсылка.Номенклатура") тогда ВызватьИсключение "Ошибка чтения ХМЛ"; КонецЕсли; Номенклатура=НоменклатураСсылка.ПолучитьОбъект(); ЭтоГруппа=ПрочитатьXML(ЧтениеХМЛ); Если Номенклатура <> Неопределено тогда Если Номенклатура.ЭтоГруппа <> ЭтоГруппа тогда ВызватьИсключение "Некорректные данные"; КонецЕсли; Иначе Если ЭтоГруппа тогда Номенклатура=Справочники.Номенклатура.СоздатьГруппу(); иначе Номенклатура=Справочники.Номенклатура.СоздатьЭлемент(); КонецЕсли; Номенклатура.УстановитьСсылкуНового(НоменклатураСсылка); КонецЕсли; Номенклатура.Родитель=ПрочитатьXML(ЧтениеХМЛ); Номенклатура.Код=ПрочитатьXML(ЧтениеХМЛ); Номенклатура.Наименование=ПрочитатьXML(ЧтениеХМЛ); Если не Номенклатура.ЭтоГруппа тогда Номенклатура.ЗакупочнаяЦена=ПрочитатьXML(ЧтениеХМЛ); Номенклатура.ЕдиницаИзмерения=ПрочитатьXML(ЧтениеХМЛ); Номенклатура.Картинка=ПрочитатьXML(ЧтениеХМЛ); Номенклатура.ПолноеНаименование=ПрочитатьXML(ЧтениеХМЛ); КонецЕсли; Если ЧтениеХМЛ.ТипУзла=ТипУзлаXML.КонецЭлемента тогда ВызватьИсключение "Ошибка чтения ХМЛ"; КонецЕсли; ЧтениеХМЛ.Прочитать(); возврат Номенклатура; |
|||
4
Serg_1960
09.02.17
✎
09:21
|
(0) Несовпадение заголовка темы ("XML обход средствами 1С") и самого алгоритма в первом посте - это не "обход" структуры XML.
"Нет, нет, нет! Ни слова больше! Ни в каком случае и никогда! В рот ничего не возьму в вашем буфете! Я, почтеннейший, проходил вчера мимо вашей стойки и до сих пор не могу забыть ни осетрины, ни брынзы. Драгоценный мой! Брынза не бывает зеленого цвета, это вас кто-то обманул."("Мастер и Маргарита"). |
|||
5
Лефмихалыч
09.02.17
✎
09:22
|
(2) так ты же не последовательное чтение выполняешь, ты объекты целиком считываешь
|
|||
6
Serg_1960
09.02.17
✎
09:33
|
"Разбор XML документа - почти все возможные способы"
http://catalog.mista.ru/public/311011/ |
|||
7
Ilqarupup
09.02.17
✎
11:39
|
(6) спасибо большое, сделал через dom, так намного удобней, чем построчно.
(5) не понял если честно. если делать чисто построчно, то объем кода будет большим, попробовал xmlns поставить и вызывать ПрочитатьXML(ЧтениеХМЛ) как ФабрикаXDTO.ПрочитатьXML(ЧтениеХМЛ) то он не видит IsFolder. |
|||
8
Жан Пердежон
09.02.17
✎
12:11
|
выгрузи xsd своей конфы (data_enterprise_current-config) и увидишь где косяк;
|
|||
9
Ilqarupup
09.02.17
✎
12:36
|
(8) как выгрузить?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |