2 votes

Erreur lors de l'utilisation de QXmlSchema et QXmlSchemaValidator

J'ai un problème en utilisant la validation d'un fichier XML avec un fichier de schéma XML. J'ai essayé de reproduire l'exemple de base fourni par la documentation, mais j'ai une erreur.

Voici mon schéma XML :

Et mon fichier XML à valider :

titi

Quand j'essaie de valider ce couple de fichiers avec d'autres outils de validation (par exemple http://www.xmlvalidation.com/), c'est un succès.

Mais lorsque j'exécute ce code Qt, j'ai une erreur :

Erreur XSDErreur dans myFile.xml, à la ligne 2, colonne 6: Aucune définition pour l'élément toto disponible.

Code :

bool isConfigurationFileValidAgainstSchema(const QString &filePath)
{
  // Récupérer le schéma :
  QXmlSchema schema;
  schema.load(MY_XSD_URL);
  // Le fichier de schéma xsd ne peut pas être invalide :
  assert(schema.isValid() && "The  file schema (.xsd) is invalid.");

  // Valider le fichier de l'utilisateur :
  QFile file{filePath};
  file.open(QIODevice::ReadOnly);
  QXmlSchemaValidator validator{schema};
  auto ok = validator.validate(&file, QUrl::fromLocalFile(file.fileName()));
  return ok;
}

L'erreur apparaît pendant la ligne :

auto ok = validator.validate(&file, QUrl::fromLocalFile(file.fileName()));

Quelqu'un aurait-il une idée du problème ?

Merci, Ben

0voto

Max Go Points 1874

Votre xml est validé avec succès avec Qt 5.8.0 msvc2015 sur Windows.

Dans votre code, vous devriez vérifier la valeur de résultat du chargement du schéma xml et des opérations d'ouverture de fichier xml:

if (!schema.load(MY_XSD_URL))
    qDebug() << "Impossible de charger le schéma xsd";
    return false;

...

if (!file.open(QIODevice::ReadOnly))
    qDebug() << "Impossible d'ouvrir le fichier xml";
    return false;

Et vous devez également vérifier la sortie du Gestionnaire de Messages de QXmlSchemaValidator. Si le paramètre par défaut ne suffit pas à vos besoins, vous pouvez définir un message handler personnalisé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X