我正在尝试使用Qt中的XSD模式验证XML。
根据W3C schema validator,XML和XSD似乎有效。
这是我执行验证的代码:
bool XMLFOMParser::isWellFormed(const std::string& text) const {
QXmlSchema schema;
bool ok = schema.load(QByteArray(SOMSchema_xsd));
std::cout<< SOMSchema_xsd << std::endl << "--------------" << std::endl;
std::cout << text << std::endl << "---------------" << std::endl;
QXmlSchemaValidator validator(schema);
bool result = validator.validate(QByteArray(text.data()));
return result;
}
text
包含必须验证的XML文本。 SOMSchema_xsd
包含xsd模式文本。
当我将架构加载到QXmlSchema
中时,变量ok
为true,并且使用cout
可以看到架构和xml均已正确加载。我完全看到了。
执行验证时,result
为假,在控制台中,我会看到以下消息:
Error XSDError in http://standards.ieee.org/downloads/1516/1516.2-2010/IEEE1516-DIF-2010.xsd, at line 1, column 0: Premature end of document.
Error XSDError in file:///my/program.exe, at line 2, column 251: Loaded schema file is invalid.
由于以下原因,我不知道为什么会得到这些错误:
cout
看到它们); QXmlSchema
在加载xsd时没有错误我做错了什么?
答案 0 :(得分:1)
您的架构似乎引用了另一个架构,即http://standards.ieee.org/downloads/1516/1516.2-2010/IEEE1516-DIF-2010.xsd
。但是,您可以验证自己的身份,但这不是指向XSD的有效链接。
但是,为了进行验证,验证器必须知道该架构的引用元素。当它尝试加载它时,您会收到错误消息。
您应该安装一个QAbstractUriResolver
,它可以满足该请求,例如从本地文件