我正在尝试读取和验证具有外部实体的 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 模块不支持外部实体?