如何使用XML Schema限制xml?

时间:2010-06-04 23:23:13

标签: qt xsd

我想将带有架构的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列:元素car的内容与其类型定义不匹配:字符串内容未在枚举方面列出。
  实例无效

我怀疑这是一个布拉诺。如何使用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 个答案:

答案 0 :(得分:1)

问题与空白有关。按照这个格式,它实际上是有效的。但是,如果开始标记,值和结束标记位于不同的行上,则它无效。

-jk