当XSD和XML都经过验证时,QXmlSchema和QXmlSchemaValidator会出错

问题描述 投票:1回答:1

我正在尝试在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为false,在de console中我可以看到以下消息:

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个回答
1
投票

看起来您的架构引用了另一个架构,名称为qazxsw poi。但是,您可以验证自己,这不是XSD的有效链接。

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

你应该安装一个http://standards.ieee.org/downloads/1516/1516.2-2010/IEEE1516-DIF-2010.xsd,它可以满足这个要求,例如:来自本地文件

© www.soinside.com 2019 - 2024. All rights reserved.