Имя: Пароль:
1C
1С v8
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) как выгрузить?
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн