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

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

尝试根据 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 文件的方式有关吗?

c# xml asp.net-core xsd-validation
3个回答
1
投票

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

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

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


0
投票

由于这没有被接受的答案,我添加我的两分钱。我们面临同样的问题 - 应用程序在框架 4.7.2 中工作,但在我们升级到 NET6 后停止工作。

这个问题帮助我在 Google 中写入正确的问题,所以如果有人最终来到这里,请检查 thisthis 问题。

答案是将此行放入您的应用程序中:

AppContext.SetSwitch("Switch.System.Xml.AllowDefaultResolver", true);

(在我的例子中,应用程序是 WPF,我已将此行放入 App.cs 构造函数中)。


-1
投票

消息很明确:SourceTypeCode' 未声明。

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

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

Plugins => Xml 工具

问候,

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