我担心使用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()));
有人会对这个问题有所了解吗?
谢谢, 本
答案 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。