Имя: Пароль:
1C
1С v8
xml и xsd
, ,
0 fatal_error
 
23.12.14
13:41
Добрый день. Есть xml файл:

<?xml version="1.0" encoding="UTF-8"?>
<doc>
    <items>
        <i>
            <tariff>Аст</tariff>
            <article>ФФ-01789-002</article>
            <exp_date>01.03.2015</exp_date>
            <price>7000</price>
        </i>
        <i>
            <tariff>Аст</tariff>
            <article>ФФ-01789-002</article>
            <exp_date>01.02.2015</exp_date>
            <price>2000</price>
        </i>
        <i>
            <tariff>Апт 5ШП</tariff>
            <article>ФФ-01789-002</article>
            <exp_date>01.03.2015</exp_date>
            <price>5000</price>
        </i>
        <i>
            <tariff>Апт 5ШП</tariff>
            <article>ФФ-01789-002</article>
            <exp_date>01.01.2015</exp_date>
            <price>1000</price>
        </i>
    </items>
</doc>

сделал по нему схему:

<?xml version="1.0" encoding="UTF-8"?>
   <xsd:schema attributeFormDefault="unqualified" targetNamespace="http://localhost/load/exp/date/price"; elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">;
         <!-- XML Schema Generated from XML Document on Tue Dec 23 2014 16:04:25 GMT+0600 (Центральная Азия (зима)) -->
         <!-- with XmlGrid.net Free Online Service http://xmlgrid.net -->
         <xsd:element name="doc">
               <xsd:complexType>
                     <xsd:sequence>
                           <xsd:element name="items">
                                 <xsd:complexType>
                                       <xsd:sequence maxOccurs="unbounded">
                                             <xsd:element name="i">
                                                   <xsd:complexType>
                                                         <xsd:sequence>
                                                               <xsd:element name="tariff" type="xsd:string"></xsd:element>
                                                               <xsd:element name="article" type="xsd:string"></xsd:element>
                                                               <xsd:element name="exp_date" type="xsd:string"></xsd:element>
                                                               <xsd:element name="price" type="xsd:int"></xsd:element>
                                                         </xsd:sequence>
                                                   </xsd:complexType>
                                             </xsd:element>
                                       </xsd:sequence>
                                 </xsd:complexType>
                           </xsd:element>
                     </xsd:sequence>
               </xsd:complexType>
         </xsd:element>
   </xsd:schema>

при выполнении кода:

Попытка
        Чтение = Новый ЧтениеXML;
        Чтение.УстановитьСтроку(СтрокаXml);
        
        Фабрика = СоздатьФабрикуXDTO("d:\doc.xsd");
        
        Пакет_load_exp_date_price = Фабрика.Пакеты.Получить("http://localhost/load/exp/date/price";);    
        СвойствоDoc    = Пакет_load_exp_date_price.КорневыеСвойства.Получить("doc");    
        ТипDoc = СвойствоDoc.Тип;
        
        doc = Фабрика.ПрочитатьXML(Чтение, ТипDoc);
        Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;

выпадает ошибка:

Ошибка при вызове метода контекста (ПрочитатьXML): Ошибка преобразования данных XDTO:
Чтение объекта типа:  - [13,30]
Проверка дополнительного свойства:
    форма: Элемент
    имя: items: Ошибка проверки данных XDTO:
Структура объекта не соответствует типу:
1 fatal_error
 
23.12.14
13:42
ругается на строке
doc = Фабрика.ПрочитатьXML(Чтение, ТипDoc);
2 fatal_error
 
23.12.14
13:43
Что нужно поправить в схеме?
3 Fragster
 
гуру
23.12.14
13:50
ТипDoc = Фабрика.Тип("","doc");
4 Fragster
 
гуру
23.12.14
13:51
вообще без нэймспейса может и не взлететь, хз
5 Записьдампа
 
23.12.14
13:57
Схема описывает элемент с именем "doc" в пространстве имен "http://localhost/load/exp/date/price";. XML содержит данные с именем "doc" в хрензнаеткаком пространстве имен. Я бы тоже ругался...
6 Fragster
 
гуру
23.12.14
13:58
<xs:schema xmlns:tns="http://localhost/load/exp/date/price&quot; xmlns:xs="http://www.w3.org/2001/XMLSchema&quot; targetNamespace="http://localhost/load/exp/date/price&quot; attributeFormDefault="unqualified" elementFormDefault="qualified">
<xs:element name="doc" type="tns:doc"/>
<xs:complexType name="doc">
.....
7 Fragster
 
гуру
23.12.14
13:59
и в (3) - ТипDoc = Фабрика.Тип("http://localhost/load/exp/date/price&quot;,&quot;doc&quot;);
8 Fragster
 
гуру
23.12.14
14:04
(5) вопрос в том, почему ругается не на первую строку, а на [13,30]
9 Записьдампа
 
23.12.14
14:28
(6) (7) Ничего не имею против. Это прекрасная схема, описывающая великолепную структуру данных в пространстве имен  "http://localhost/load/exp/date/price";. Из нее можно получать чудесные типы.
Вот только XML, который (0) пытается прочесть, ничего про эту офигенскую схему не знает, потому что использует пустое пространство имен.
Поэтому тип, получаемый как Фабрика.Тип("http://localhost/load/exp/date/price";) неприменим к этому XML.

Укажи в XML <doc xmlns=""http://localhost/load/exp/date/price"">; и возрадуйся.
10 Fragster
 
гуру
23.12.14
14:30
(9)->(8)
11 Fragster
 
гуру
23.12.14
14:31
в (0) походу не вся XML
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс