当 XSD 和 XML 都被验证时,QXmlSchema 和 QXmlSchemaValidator 会报错
QXmlSchema and QXmlSchemaValidator give an error when XSD and XML are both validated
我正在尝试在 Qt 中使用 XSD 模式验证 XML。
XML 和 XSD 似乎是有效的,根据 W3C schema validator。
这是我执行验证的代码:
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
为真,并且使用 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 时没有给我任何错误
- W3C 网站告诉我 XML 已通过验证,没有任何问题。
我做错了什么?
您的架构似乎引用了另一个架构,即 http://standards.ieee.org/downloads/1516/1516.2-2010/IEEE1516-DIF-2010.xsd
。但是正如您可以验证自己的那样,这不是 XSD.
的有效 link
但是,为了进行验证,验证器必须知道该模式的引用元素。当它尝试加载它时,您会收到错误消息。
您应该安装可以满足该请求的 QAbstractUriResolver
,例如来自本地文件
我正在尝试在 Qt 中使用 XSD 模式验证 XML。
XML 和 XSD 似乎是有效的,根据 W3C schema validator。
这是我执行验证的代码:
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
为真,并且使用 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 时没有给我任何错误- W3C 网站告诉我 XML 已通过验证,没有任何问题。
我做错了什么?
您的架构似乎引用了另一个架构,即 http://standards.ieee.org/downloads/1516/1516.2-2010/IEEE1516-DIF-2010.xsd
。但是正如您可以验证自己的那样,这不是 XSD.
但是,为了进行验证,验证器必须知道该模式的引用元素。当它尝试加载它时,您会收到错误消息。
您应该安装可以满足该请求的 QAbstractUriResolver
,例如来自本地文件