Как проверить XML, когда на схему ссылаются в документе XML? - PullRequest
0 голосов
/ 20 февраля 2019

XML содержит ссылку на схему.Как я могу получить C # для проверки XML по схеме?

<Specification xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schemas.company.com/Specification.xsd">
    <FirstElement>...</FirstElement>
</Specification>

Я изменил URL расположения схемы для этого поста, поэтому этот пример на самом деле не будет работать.Я пробовал следующее:

var schemaErrors = new List<string>();
var settings = new XmlReaderSettings
{
    DtdProcessing = DtdProcessing.Ignore,
    ValidationFlags = XmlSchemaValidationFlags.ProcessSchemaLocation | XmlSchemaValidationFlags.ReportValidationWarnings,
    ValidationType = ValidationType.Schema
};
settings.ValidationEventHandler += (o, e) => { schemaErrors.Add(e.Message); };

using (var xmlReader = XmlReader.Create(xmlText, settings))
{
    XDocument.Load(xmlReader);
    var actual = schemaErrors;

    Assert.That(actual, Is.Empty);
}

, где xmlText - это XML сверху.

Я получаю следующие ошибки:

"Невозможно загрузить схему для пространства имен'' - Основное соединение было закрыто: при отправке произошла непредвиденная ошибка. "«Не удалось найти информацию о схеме для элемента« Спецификация ».»

Я искал ответы в Интернете, но кажется, что все используют локальную схему.

1 Ответ

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

Казалось бы, нет ничего плохого в коде.Несмотря на правильную проверку схемы в XmlSpy, модульный тест не удался.

Подсказка была в сообщении об ошибке «Базовое соединение было закрыто: при отправке произошла непредвиденная ошибка».Как только я попросил хост включить логирование, проблема ушла.Самое странное.

...