使用QXmlSchema和QXmlSchemaValidator时出错

时间:2017-04-20 08:06:26

标签: xml qt xsd xml-validation qt5.6

我担心使用XML Schema文件验证XML文件。我试图重现文档提供的基本示例,但是我有一个错误。

这是我的 XML架构

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element type="xs:string" name="toto">
  </xs:element>
</xs:schema>

我的要验证的XML文件

<?xml version="1.0" encoding="UTF-8" ?>
<toto>titi</toto>

当我尝试使用其他验证工具验证这两个文件时(例如http://www.xmlvalidation.com/),这是成功的。

但是当我运行这个Qt代码时,我有一个错误:

Error XSDError in myFile.xml, at line 2, column 6: No definition for element toto available.

代码:

bool isConfigurationFileValidAgainstSchema(const QString &filePath)
{
  // Retrieve the schema :
  QXmlSchema schema;
  schema.load(MY_XSD_URL);
  // The xsd resource file can't be invalid :
  assert(schema.isValid() && "The  file schema (.xsd) is invalid.");

  // Validate the user file :
  QFile file{filePath};
  file.open(QIODevice::ReadOnly);
  QXmlSchemaValidator validator{schema};
  auto ok = validator.validate(&file, QUrl::fromLocalFile(file.fileName()));
  return ok;
}

行中出现错误:

auto ok = validator.validate(&file, QUrl::fromLocalFile(file.fileName()));

有人会对这个问题有所了解吗?

谢谢,

1 个答案:

答案 0 :(得分:0)

Windows上的 Qt 5.8.0 msvc2015 验证您的xml正常。

在您的代码中,您应该检查xml架构加载的结果值并打开xml文件操作:

if (!schema.load(MY_XSD_URL))
    qDebug() << "Can't load xsd schema";
    return false;

...

if (!file.open(QIODevice::ReadOnly))
    qDebug() << "Can't open xml file";
    return false;

您还需要检查来自QXmlSchemaValidator的消息处理程序的输出。如果默认值不足以满足您的需求,您可以设置custom