2016-09-03 3 views
0

Что не так с этим xsd-файлом?Преждевременный конец документа qt, xml

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified"> 
    <xs:element name="root" type="rootType"/> 
    <xs:complexType name="twokindType"> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"> 
     <xs:attribute type="xs:string" name="name"/> 
     <xs:attribute type="xs:int" name="n"/> 
     </xs:extension> 
    </xs:simpleContent> 
    </xs:complexType> 
    <xs:complexType name="twoType"> 
    <xs:sequence> 
     <xs:element type="twokindType" name="twokind"/> 
    </xs:sequence> 
    <xs:attribute type="xs:string" name="name"/> 
    <xs:attribute type="xs:byte" name="number"/> 
    </xs:complexType> 
    <xs:complexType name="vendorType"> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"> 
     <xs:attribute type="xs:string" name="name" use="optional"/> 
     </xs:extension> 
    </xs:simpleContent> 
    </xs:complexType> 
    <xs:complexType name="priceType"> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"> 
     <xs:attribute type="xs:string" name="name" use="optional"/> 
     </xs:extension> 
    </xs:simpleContent> 
    </xs:complexType> 
    <xs:complexType name="oneType"> 
    <xs:sequence> 
     <xs:element type="vendorType" name="vendor"/> 
     <xs:element type="priceType" name="price"/> 
    </xs:sequence> 
    <xs:attribute type="xs:string" name="name" use="optional"/> 
    <xs:attribute type="xs:byte" name="n" use="optional"/> 
    </xs:complexType> 
    <xs:complexType name="onesType"> 
    <xs:sequence> 
     <xs:element type="oneType" name="one" maxOccurs="unbounded" minOccurs="0"/> 
    </xs:sequence> 
    <xs:attribute type="xs:string" name="name"/> 
    <xs:attribute type="xs:byte" name="number"/> 
    </xs:complexType> 
    <xs:complexType name="rootType"> 
    <xs:sequence> 
     <xs:element type="twoType" name="two"/> 
     <xs:element type="onesType" name="ones"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

Я проверил его действительность на разных сайтах, и все говорят, что все в порядке. Я взял образец кода с сайта qt, чтобы загрузить его, и я получаю сообщение об ошибке «Преждевременный конец документа». Ошибка указана в строке 1, столбец 0. Я не вижу в этом ничего плохого. Я посмотрел на этот файл, используя hex-редактор, и нет никаких странных символов.

Ниже приведен код с сайта Qt:

QUrl schemaUrl("file:///home/user/schema.xsd"); 

    QXmlSchema schema; 
    schema.load(schemaUrl); 

    if (schema.isValid()) { 
     QFile file("test.xml"); 
     file.open(QIODevice::ReadOnly); 

     QXmlSchemaValidator validator(schema); 
     if (validator.validate(&file, QUrl::fromLocalFile(file.fileName()))) 
      qDebug() << "instance document is valid"; 
     else 
      qDebug() << "instance document is invalid"; 
    } 
+0

может быть ошибкой в ​​файле xml? –

+0

@AlexMuravyov вы читали то, что я сказал вообще? – Pavel

+0

Просьба показать XML-документ 'test.xml'. Благодарю. –

ответ

0

Мой опыт показывает, что «Преждевременный конец документа» указывает на то, что определение загруженного пуста. Таким образом, переменная schemaUrl не указывает правильный файл, даже если в вашей файловой системе существует «/home/user/schema.xsd». Попробуйте следующее:

schema.load(QUrl::fromLocalFile(QString("/home/user/schema.xsd"))); 

или задаваемая переменной schemaUrl следующим образом:

QUrl schemaUrl(QString("file:///home/user/schema.xsd")); 

Это всегда работает в моем коде.