2010-06-04 69 views
2

我想限制XML模式到一个特定的集合。我阅读本教程如何用XML Schema限制xml?

http://www.w3schools.com/schema/schema_facets.asp

这似乎是我想要的。所以,我使用Qt来验证这个xml

<car>BMW</car> 

这里是相关的源代码。

QXmlSchema schema; 

schema.load(QUrl("file:///workspace/QtExamples/ValidateXSD/car.xsd")); 
if (schema.isValid()) { 
    QXmlSchemaValidator validator(schema); 

    if (validator.validate(QUrl("file:///workspace/QtExamples/ValidateXSD/car.xml"))) { 
     qDebug() << "instance is valid"; 
    } else { 
     qDebug() << "instance is invalid"; 
    } 
} else { 
    qDebug() << "schema is invalid"; 
} 

我希望xml匹配模式定义。意外的是,QxmlSchemaValidator抱怨。

错误XSDError在文件:///workspace/QtExamples/ValidateXSD/car.xml,位于第1行,第5栏:元件车的内容不匹配其类型定义:字符串内容未在枚举中列出方面..
实例无效

我怀疑这是一个braino。如何用XML Schema限制xml?

下面是本教程的XSD:

<xs:element name="car"> 
    <xs:simpleType> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="Audi"/> 
     <xs:enumeration value="Golf"/> 
     <xs:enumeration value="BMW"/> 
    </xs:restriction> 
    </xs:simpleType> 
</xs:element> 
+1

您能否显示xsd? – 2010-06-04 23:25:33

+0

看起来像一个xsd问题,而不是一个Qt问题。是的,请向我们展示xsd。 – 2010-06-06 07:53:13

+0

感谢您的意见。 xsd是教程的一部分。希望反引用的作品也可以在评论中转义代码。 ' ' – John 2010-06-07 13:57:11

回答

1

问题曾与空白做。如此格式化,它实际上是有效的。但是,如果开始标记,值和结束标记位于不同的行上,则该标记无效。

-jk

+0

这帮了很多! :)(+1) – atamanroman 2011-03-01 09:25:36