尝试根据 MVC/ASP.Net Core 中的架构验证 XML 文件时遇到异常错误。
我收到的错误是这样的:
System.Xml.Schema.XmlSchemaValidationException:“类型”http://ns.editeur.org/onix/3.0/reference:SourceTypeCode”未声明,或者不是简单类型。”
我的代码是这样的:
XmlSchemaSet onixschema = new XmlSchemaSet();
XDocument xmlDocument = XDocument.Load(@"path.to.xml.file");
onixschema.Add("http://ns.editeur.org/onix/3.0/reference", @"path.to.ONIX_BookProduct_3.0_reference.xsd");
xmlDocument.Validate(onixschema, (o, e) =>
{
validationResult.ErrorMessages.Add(e.Message);
});
我真的不知道从哪里开始处理例外。该消息并没有多大启发!
真正令人困惑的是,如果我在 WebForms/.Net 中运行这个确切的代码(相同的文件等),它会正确验证。
我没有收到错误信息。
如果有人能够阐明这一点,我将非常感激。
//编辑
很确定它与 ASP.Net Core 有关。如果我创建一个全新的 MVC/.Net Web 应用程序,并将代码粘贴到 Home Controller 中,它就会按预期工作。没有验证异常。
如果我创建一个全新的 MVC/ASP.NET Core 应用程序,并将代码粘贴到 Home Controller 中,则会失败,并出现验证异常。
这可能与 ASP.NET Core 处理静态 XSD 文件的方式有关吗?
好吧,我已经回答了这个问题了。
问题在于 XSD 文件导入了另外两个 XSD 文件。如果我手动导入这些文件并创建一个更大的 XSD 文件,那么问题就会消失。
所以这与 ASP.NET Core 处理相对路径的方式有关。它无法识别有两个要导入的 XSD 文件,或者无法找到它们(而 Web Forms 和 MVC/.NET 可以这样做)。我还不知道为什么!