bool CMTableWidget::XMLTest(QString XMLstr)
{
QFile file(Modpath + this->ProtocolType + QString::fromLocal8Bit(".xsd"));
if(!file.open(QIODevice::ReadOnly))
{
qDebug() << QString::fromLocal8Bit("XMLTest模板文件打开失败!");
return false;
}
QXmlSchema schema;
schema.load(&file, QUrl::fromLocalFile(file.fileName()));
if (schema.isValid() == false)
{
qDebug() << QString::fromLocal8Bit("xsd文件无效");
return false;
}
QByteArray data = XMLstr.toUtf8();
QBuffer buffer(&data);
buffer.open(QIODevice::ReadOnly);
QXmlSchemaValidator validator(schema);
qDebug() << buffer.data();
if (!validator.validate(&buffer))
{
qDebug() << QString::fromLocal8Bit("xml文件无效");
return false;
}
qDebug() << "here";
return true;
}
很普通的一个xml验证函数,从帮助中抄的,现在的问题是当我的xsd文件中使用sequence指示器时就没有问题,使用all指示器时执行到if (!validator.validate(&buffer))时候会出现程序崩溃,现象从任务管理器看是死循环(cpu占用超高,占用内存不停上升),帮忙分析一下。
xsd文件太长了就不全上了,
xs:complexType
xs:sequence
xs:complexType
xs:sequence
xs:simpleType
/xs:restriction
/xs:simpleType
/xs:element
<xs:element name="protocol">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="iec104-c"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
什么检查文件对不对的就不用说了,我用sequence没问题,改成all就有问题,就算文件不对也不应该出这样的错误吧,顶多验证不通过。