QXmlSchema и QXmlSchemaValidator выдают ошибку при проверке XSD и XML - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь проверить XML с помощью схемы XSD в Qt.

XML и XSD, по-видимому, действительны, согласно Средство проверки схемы W3C .

Это код, в котором я выполняю проверки:

bool XMLFOMParser::isWellFormed(const std::string& text) const {
  QXmlSchema schema;
  bool ok = schema.load(QByteArray(SOMSchema_xsd));
  std::cout<< SOMSchema_xsd << std::endl << "--------------" << std::endl;
  std::cout << text << std::endl << "---------------" << std::endl;
  QXmlSchemaValidator validator(schema);
  bool result = validator.validate(QByteArray(text.data()));
  return result;
}

text содержит текст XML, который должен быть проверен.SOMSchema_xsd содержит текст схемы xsd.

Когда я загружаю схему в QXmlSchema, переменная ok имеет значение true, а с cout я вижу, что и схема, и xml загружены правильно.Я вижу их полностью.

Когда я выполняю проверку, result ложно, и в консоли я вижу следующие сообщения:

Error XSDError in http://standards.ieee.org/downloads/1516/1516.2-2010/IEEE1516-DIF-2010.xsd, at line 1, column 0: Premature end of document.
Error XSDError in file:///my/program.exe, at line 2, column 251: Loaded schema file is invalid.

Я не знаю, почему я 'я получаю эти ошибки, поскольку:

  • Файлы загружаются правильно в классы (я вижу их с помощью cout);
  • QXmlSchema не дает мне ошибок, когда xsdзагружено
  • Сайт W3C говорит мне, что XML проверяется без проблем.

Что я делаю не так?

1 Ответ

0 голосов
/ 18 февраля 2019

Похоже, ваша схема ссылается на другую схему, а именно http://standards.ieee.org/downloads/1516/1516.2-2010/IEEE1516-DIF-2010.xsd.Но, как вы можете убедиться сами, это недопустимая ссылка на XSD.

Однако для проверки валидатор должен знать ссылочные элементы этой схемы.Когда он пытается загрузить его, вы получаете ошибку.

Вы должны установить QAbstractUriResolver, который может обслуживать этот запрос, например, из локального файла

...