在XML文档中引用架构时如何验证XML?

时间:2019-02-20 13:49:56

标签: xml validation xsd schema

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。

我收到以下错误:

“无法加载名称空间的架构”-基础连接已关闭:发送中发生意外错误。 “找不到元素'Specification'的架构信息。”

我已经在互联网上搜索了答案,但似乎每个人都使用本地模式。

1 个答案:

答案 0 :(得分:0)

代码似乎没有问题。尽管架构已在XmlSpy中正确验证,但是单元测试失败。

提示是在错误消息“基础连接已关闭:发送中发生意外错误”。一旦我要求主机启用日志记录,问题就消失了。最奇怪的。