【问题标题】:QXmlSchema and QXmlSchemaValidator give an error when XSD and XML are both validated当 XSD 和 XML 都被验证时,QXmlSchema 和 QXmlSchemaValidator 给出错误
【发布时间】:2019-02-18 09:16:27
【问题描述】:

我正在尝试在 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 为真,使用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 已通过验证,没有任何问题。

我做错了什么?

【问题讨论】:

    标签: xml qt xsd xsd-validation qtxml


    【解决方案1】:

    您的架构似乎引用了另一个架构,即http://standards.ieee.org/downloads/1516/1516.2-2010/IEEE1516-DIF-2010.xsd。但您可以自己验证,这不是 XSD 的有效链接。

    但是,为了验证,验证器必须知道该架构的引用元素。当它尝试加载它时,您会收到错误。

    您应该安装一个QAbstractUriResolver,它可以满足该请求,例如来自本地文件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多