如何在XML文档中引用模式时验证XML?

问题描述 投票:0回答:1

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。

我收到以下错误:

“无法加载命名空间的架构” - 底层连接已关闭:发送时发生意外错误。 “无法找到元素'规范'的架构信息。”

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

xml validation xsd schema
1个回答
0
投票

看起来代码没有任何问题。尽管模式在XmlSpy中正确验证,但单元测试失败了。

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

© www.soinside.com 2019 - 2024. All rights reserved.