根据模式验证XML文件会引发异常

时间:2018-06-13 03:30:29

标签: c# xml asp.net-core xsd-validation

尝试根据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核心应用程序,并将代码粘贴在Home Controller中,则会失败,并带有验证异常。

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

2 个答案:

答案 0 :(得分:0)

消息很明确:SourceTypeCode'没有宣布。

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

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

Plugins => Xml Tools

此致

答案 1 :(得分:0)

好的,我有点回答了这个问题。

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

所以它与ASP.NET Core处理相对路径的方式有关。它没有找到识别出要导入的两个XSD文件,或者找不到它们(而Web Forms& MVC / .NET能够这样做)。我不知道为什么!