кодсинтез не анализирует мой xml-файл

Я использую синтез кода для создания классов, которые представляют мой файл xsd. Файл xml был проверен на соответствие файлу схемы с помощью программы онлайн-проверки, и все в порядке. Однако при запуске моей программы, которая просто читает xml и пытается создать структуры, представляющие файл xml, я получаю исключения для каждого элемента, например: ошибка: атрибут 'dburl' не объявлен для элемента 'quantoptions', ошибка: объявление не найдено для элемент «опция» и ошибка: не найдено объявление для элемента «символ». Может кто-нибудь посоветовать, почему это происходит?

Это файл XML:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Document created with online XML Editor http://xmlgrid.net 2013/09/08 2:17:41  -->
   <quantoptions dburl="test attribute">
         <option>
               <symbol>test string</symbol>
               <dateselection enddate="2002-09-24" startdate="2002-09-24"></dateselection>
         </option>
         <option>
               <symbol>test string</symbol>
               <dateselection enddate="2002-09-24" startdate="2002-09-24"></dateselection>
               <blackscholes>false</blackscholes>
               <volatility>true</volatility>
         </option>
   </quantoptions>

это файл xsd:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
                <xs:element name="quantoptions">
                                <xs:complexType>
                                                <xs:sequence>
                                                                <xs:element maxOccurs="unbounded" minOccurs="1" name="option">
                                                                            <xs:complexType>
                                                                                                <xs:sequence maxOccurs="1" minOccurs="1">
                                                                                                                <xs:element maxOccurs="1" minOccurs="1" name="symbol" type="xs:string"/>
                                                                                                            <xs:element maxOccurs="1" minOccurs="1" name="dateselection">
                                                                                                                            <xs:complexType>
                                                                                                                                            <xs:attribute name="enddate" type="xs:date" use="required"/>
                                                                                                                                            <xs:attribute name="startdate" type="xs:date" use="required"/>
                                                                                                                            </xs:complexType>
                                                                                                            </xs:element>
                                                                                                            <xs:choice maxOccurs="unbounded" minOccurs="0">
                                                                                                                            <xs:element maxOccurs="1" minOccurs="1" name="blackscholes" type="xs:boolean"/>
                                                                                                                            <xs:element maxOccurs="1" minOccurs="1" name="volatility" type="xs:boolean"/>
                                                                                                            </xs:choice>
                                                                                            </xs:sequence>
                                                                            </xs:complexType>
                                                            </xs:element>
                                            </xs:sequence>
                                            <xs:attribute name="dburl" type="xs:string" use="required"/>
                            </xs:complexType>
            </xs:element>

and finally here is the code, exception is thrown on this line: std::auto_ptr optionConfig (quantoptions_ (configPath));

    const std::string configPath  = "../config/quantoptions.xml";
    std::auto_ptr<quantoptions> optionConfig (quantoptions_ (configPath));

    optionConfig->dburl();

    for(quantoptions::option_const_iterator i (optionConfig->option().begin()); i != optionConfig->option().end(); ++i)
    {
        std::cout<< i->symbol();
    }

заранее спасибо


person godzilla    schedule 08.09.2013    source источник
comment
Схема не имеет окончания ‹/xs:schema›. Я предполагаю, что копирование и вставка схемы в stackoverflow не удалось.   -  person Erik Sjölund    schedule 08.09.2013


Ответы (1)


наконец-то решил проблему, я не уверен, что это было задокументировано, но, хотя xml был правильно сформирован, синтез кода искал следующие строки в xml: . поэтому рабочий xml выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Document created with online XML Editor http://xmlgrid.net 2013/09/08 2:17:41  -->
   <quantoptions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema.xsd" dburl="test attribute">
         <option>
               <symbol>test string</symbol>
               <dateselection enddate="2002-09-24" startdate="2002-09-24"></dateselection>
         </option>
         <option>
               <symbol>test string</symbol>
               <dateselection enddate="2002-09-24" startdate="2002-09-24"></dateselection>
               <blackscholes>false</blackscholes>
               <volatility>true</volatility>
         </option>
   </quantoptions>
person godzilla    schedule 08.09.2013