2010-06-04 6 views
2

Je veux restreindre xml avec un schéma à un ensemble spécifique. J'ai lu ce tutorielComment restreindre xml avec un schéma XML?

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

Cela semble être ce que je veux. Donc, j'utilise Qt pour valider ce xml

<car>BMW</car> 

Voici le code source pertinent.

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"; 
} 

Je m'attendais à ce que le fichier XML corresponde à la définition du schéma. De manière inattendue, QxmlSchemaValidator se plaint.

Erreur XSDError dans le fichier: ///workspace/QtExamples/ValidateXSD/car.xml, à la ligne 1, colonne 5: Contenu de voiture élément ne correspond pas à la définition de type: contenu de la chaîne ne figure pas dans l'énumération facette ..
instance est invalide

Je soupçonne que c'est un braino. Comment restreindre xml avec un schéma XML?

Voici le xsd du tutoriel:

<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

Pourriez-vous montrer le xsd? –

+0

On dirait une question de xsd, pas tellement celle de Qt. Et oui, s'il vous plaît nous montrer le xsd. –

+0

Merci pour vos commentaires. Le xsd fait partie du tutoriel. Espérons que le backquote fonctionne pour échapper le code dans les commentaires aussi. ' ' – John

Répondre

1

Le problème a dû faire avec des espaces blancs. Comme formaté sur ceci, cela fonctionne. Cependant, si l'étiquette de début, la valeur et l'étiquette de fin se trouvent sur des lignes distinctes, elles ne sont pas valides.

-jk

+0

Cela a beaucoup aidé! :) (+1) – atamanroman