外部エンティティを持つ 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.xsd に対して test.xml を検証しようとします。
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 モジュールが外部エンティティをサポートしていないだけですか?