Я пытаюсь прочитать и проверить XML-документ с внешними объектами. Но у меня нет успеха как в чтении, так и в проверке. Я использовал это для создания тестового примера.
Тестовый xml:
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE doc [
<!ENTITY otherFile SYSTEM "otherFile.xml">
]>
<doc>&otherFile;</doc>
Другой xml:
<baz>this is my content</baz>
Тест xsd:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="doc">
<xs:complexType>
<xs:sequence>
<xs:element ref="baz"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="baz" type="xs:string"/>
</xs:schema>
Сначала я пытаюсь прочитать содержимое test.xml, используя QDomDocument
:
QDomDocument doc;
doc.setContent(&testFile);
qDebug() << doc.toString();
Но в выводе отладки я получаю необработанный текст из test.xml. Внешний объект не заменяется.
Затем я пытаюсь проверить test.xml на соответствие test.xsd:
QXmlSchema schema;
bool res = schema.load(&xsdFile, QUrl::fromLocalFile(xsdPath));
if (res == true)
{
QXmlSchemaValidator validator(schema);
if (validator.validate(&xmlFile, QUrl::fromLocalFile(xmlPath)))
{
qDebug() << "xml" << xmlName << "is valid";
}
else
{
qDebug() << "xml" << xmlName << "is invalid";
}
}
Но проверка не проходит, и я получаю следующую ошибку:
Error XSDError in file:///..., at line 5, column 5: Element doc is missing child element.
Я делаю что-то не так или модуль Qt Xml просто не поддерживает внешние объекты?