C# 根据架构验证XML文件引发异常

C# 根据架构验证XML文件引发异常,c#,xml,asp.net-core,xsd-validation,C#,Xml,Asp.net Core,Xsd Validation,尝试根据MVC/ASP.Net Core中的架构验证XML文件时遇到异常错误 我得到的错误是: System.Xml.Schema.XmlSchemaValidationException:“类型“”未声明,或不是简单类型。” 我的代码是: XmlSchemaSet onixschema = new XmlSchemaSet(); XDocument xmlDocument = XDocument.Load(@"path.to.xml.file"); onixschema.Add("http

尝试根据MVC/ASP.Net Core中的架构验证XML文件时遇到异常错误

我得到的错误是:

System.Xml.Schema.XmlSchemaValidationException:“类型“”未声明,或不是简单类型。”

我的代码是:

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.NETCore有关。如果我创建了一个全新的MVC/.Net web应用程序,并将代码粘贴到Home Controller中,它就会正常工作。没有验证例外

如果我创建了一个全新的MVC/ASP.NET核心应用程序,并将代码粘贴到Home Controller中,则会失败,只有验证例外


这可能与ASP.NET Core处理静态XSD文件的方式有关吗?

消息很清楚:未声明SourceTypeCode

为了确保xml文件没有任何错误,可以使用notepad++上的XmlTools对其进行验证

如果没有错误,那么我们可以确定问题出在代码中,而不是文件中


问候,

好的,我已经回答了这个问题

问题是XSD文件导入了另外两个XSD文件。如果我手动导入这些文件并创建一个更大的XSD文件,那么问题就不会出现了


所以这与ASP.NETCore处理相对路径的方式有关。它没有意识到有两个XSD文件要导入,或者找不到它们(而WebForms&MVC/.NET可以这样做)。我还不知道为什么

XmlSchemaSet Add()的定义如下:public XmlSchema Add(string targetNamespace,string schemaUri);您的add没有命名空间作为第一个参数。targetNamespace不是“”吗?除非我遗漏了什么,否则我的add确实有2个参数(请参阅代码)…两个字符串,但字符串错误。第一个参数是URI,它应该是第二个参数。您没有名称空间。您好,谢谢,但是ONIX规范的名称空间是一个URI。从官方文档来看:否。名称空间ABC通常是xmlns:ABC==“ns.editeur.org/onix/3.0/reference”。如果省略名称空间,则表示它是默认名称空间。因此,在您的示例中,名称空间是xsi.Thank,但它在MVC/.Net应用程序和Web表单应用程序中运行良好。相同的文件,相同的代码。我认为您的xml实际上在SourceTypeCode中有一个验证错误。下面网页上的模式不是很有帮助,但示例xml可能会帮助您:这就是所发生的事情。架构正在引用在两个导入的XSD文件中定义的类型。他们没有被导入-我不知道为什么-所以你得到了类型未定义的错误。如果将XSD文件组合在一起(实际上是手动导入),错误就会消失,因为简单类型现在已在XSD文件中定义。谢谢你的时间和帮助。谢谢!