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。
我收到以下错误:
“无法加载命名空间的架构” - 底层连接已关闭:发送时发生意外错误。 “无法找到元素'规范'的架构信息。”
我在互联网上搜索了答案,但似乎每个人都使用本地架构。
看起来代码没有任何问题。尽管模式在XmlSpy中正确验证,但单元测试失败了。
该提示位于错误消息“基础连接已关闭:发送时发生意外错误。”。一旦我要求主机启用日志记录,问题就消失了。最奇怪的。