在 C# 中根据引用的 XSD 验证 XML

2023-12-23

我有一个具有指定架构位置的 XML 文件,如下所示:

xsi:schemaLocation="someurl ..\localSchemaPath.xsd"

我想用 C# 进行验证。当我打开文件时,Visual Studio 会根据架构验证它并完美列出错误。但不知何故,如果不指定要验证的模式,我似乎无法在 C# 中自动验证它,如下所示:

XmlDocument asset = new XmlDocument();

XmlTextReader schemaReader = new XmlTextReader("relativeSchemaPath");
XmlSchema schema = XmlSchema.Read(schemaReader, SchemaValidationHandler);

asset.Schemas.Add(schema);

asset.Load(filename);
asset.Validate(DocumentValidationHandler);

我是否应该能够自动使用 XML 文件中指定的架构进行验证?我缺少什么?


您需要创建一个 XmlReaderSettings 实例,并在创建时将其传递给您的 XmlReader。然后您就可以订阅ValidationEventHandler在设置中接收验证错误。您的代码最终将如下所示:

using System.Xml;
using System.Xml.Schema;
using System.IO;

public class ValidXSD
{
    public static void Main()
    {

        // Set the validation settings.
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.ValidationType = ValidationType.Schema;
        settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
        settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
        settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
        settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);

        // Create the XmlReader object.
        XmlReader reader = XmlReader.Create("inlineSchema.xml", settings);

        // Parse the file. 
        while (reader.Read()) ;

    }
    // Display any warnings or errors.
    private static void ValidationCallBack(object sender, ValidationEventArgs args)
    {
        if (args.Severity == XmlSeverityType.Warning)
            Console.WriteLine("\tWarning: Matching schema not found.  No validation occurred." + args.Message);
        else
            Console.WriteLine("\tValidation error: " + args.Message);

    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C# 中根据引用的 XSD 验证 XML 的相关文章

  • 使用具有现有访问令牌的 Google API .NET 客户端

    用例如下 移动应用程序正在通过 Google 对用户进行身份验证 并且在某些时候 我们需要将用户的视频发布到他的 YouTube 帐户 出于实际原因 实际发布应该由后端完成 已经存储在那里的大文件 由于用户已经通过应用程序的身份验证 因此应
  • 向 ExpandoObject 添加方法时,“关键字 'this' 在静态属性、静态方法或静态字段初始值设定项中无效”

    我尝试向 ExpandoObject 添加一个动态方法 该方法将返回属性 动态添加 给它 但它总是给我错误 我在这里做错了什么吗 using System using System Collections Generic using Sys
  • 显示异常时的自定义错误消息:从客户端检测到潜在危险的 Request.Form 值

    我在我的 Web 应用程序中使用 ASP NET 的登录控件 当发生此异常时 我想在标签上显示一种有趣的错误类型System Web HttpRequestValidationException A potentially dangerou
  • 如何使用recv()检测客户端是否仍然连接(并且没有挂起)?

    我写了一个多客户端服务器程序C on SuSE Linux 企业服务器 12 3 x86 64 我为每个客户端使用一个线程来接收数据 我的问题是 我使用一个终端来运行服务器 并使用其他几个终端来运行服务器telnet到我的服务器 作为客户端
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • C 语言中 =+(等于加)是什么意思?

    我碰到 与标准相反 今天在一些 C 代码中 我不太确定这里发生了什么 我在文档中也找不到它 In ancientC 版本 相当于 它的残余物与最早的恐龙骨头一起被发现 例如 B 引入了广义赋值运算符 使用x y to add y to x
  • 在非活动联合成员上使用“std::addressof”是否定义明确[重复]

    这个问题在这里已经有答案了 下面的代码是尝试实现constexpr的版本offsetof在 C 11 中 它可以在 gcc 7 2 0 和 clang 5 0 0 中编译 这取决于申请std addressof工会非活跃成员的成员 这是明确
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • strcmp 给出分段错误[重复]

    这个问题在这里已经有答案了 这是我的代码给出分段错误 include
  • 什么是 __declspec 以及何时需要使用它?

    我见过这样的例子 declspec在我正在阅读的代码中 它是什么 我什么时候需要使用这个构造 这是 Microsoft 对 C 语言的特定扩展 它允许您使用存储类信息来赋予类型或函数属性 文档 declspec C https learn
  • 运算符“==”不能应用于“int”和“string”类型的操作数

    我正在编写一个程序 我想到了一个数字 然后计算机猜测了它 我一边尝试一边测试它 但我不断收到不应该出现的错误 错误是主题标题 我使用 Int Parse 来转换我的字符串 但我不知道为什么会收到错误 我知道它说 不能与整数一起使用 但我在网
  • WinRT 定时注销

    我正在开发一个 WinRT 应用程序 要求之一是应用程序应具有 定时注销 功能 这意味着在任何屏幕上 如果应用程序空闲了 10 分钟 应用程序应该注销并导航回主屏幕 显然 执行此操作的强力方法是在每个页面的每个网格上连接指针按下事件 并在触
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public

随机推荐

  • 列表框控件中的多列

    如何在列表框中显示两列 列表框并非设计用于显示多列数据 即使Windows Forms版本也不直接支持这种数据显示 您的要求尚不清楚 但最简单的方法是使用控制 它为您提供了许多开箱即用的功能 并且您可以轻松地将其扩展到更多列 如果您需要对外
  • Windows 上的 Django-pyodbc SQL 服务器连接问题

    我和另一位开发人员正在另一台服务器上使用旧版 SQL Server 数据库 SQLEXPRESS 设置 django v1 4 2 项目 到目前为止 我们已经能够使用 django pyodbc 从 Linux 和 Mac 连接到数据库 并
  • 设置初始值 Angular 2 反应式数组

    我正在尝试设置 Angular 2 反应形式 formArray 对象的初始值 尽管用于设置表单值的 json 对象包含具有多个条目的数组值 但仅显示第一个条目 并且 form value 也仅显示第一个条目 我正在使用语法
  • 使用 WhatsApp URL 方案发送 URL 和文本

    我正在尝试使用 WhatsApp 的自定义 URL 方案发送一些带有 URL 的文本 显然只有一个有效参数可用于此目的 text NSURL whatsappURL NSURL URLWithString whatsapp send tex
  • 是否有一个用于长类型的函数 Math.Pow(A,n) ?

    我正在测试一个小的 C 程序片段 short min short short int Math Pow 2 15 short max short short int Math Pow 2 15 1 Console WriteLine The
  • 向 ggplot2 绘图添加辅助 y 轴 - 使其完美

    添加辅助 y 轴 缩放原始 y 轴之一 这个话题并不新鲜 例如 它已被触动过多次在这个 ggplot2 谷歌组线程上 http groups google com group ggplot2 browse thread thread b48
  • 更改 Finder 文件夹背景颜色 AppleScript

    我正在尝试在重复循环中更改 Finder 的背景颜色 tell application Finder set windowCount to count windows if windowCount gt 0 then check if wi
  • 垃圾收集应该已删除对象,但 WeakReference.IsAlive 仍返回 true

    我有一个我希望通过的测试 但垃圾收集器的行为并不像我想象的那样 Test public void WeakReferenceTest2 var obj new object var wRef new WeakReference obj wR
  • tm 使用示例

    你能举个使用的例子吗tm 我不知道如何初始化struct 当前日期以此格式写入y m d 如何使用tm结构 call time 获取当前日期 时间 自 1970 年 1 月 1 日以来的秒数 call localtime to get st
  • .NET Core:从 API JSON 响应中删除空字段

    在 NET Core 1 0 所有 API 响应 的全局级别上 如何配置 Startup cs 以便在 JSON 响应中删除 忽略空字段 使用 Newtonsoft Json 您可以将以下属性应用于属性 但我想避免将其添加到每个属性 Jso
  • 将文件保存到 Azure Blob 中

    我正在使用下面的 python 代码将文件保存到本地文件夹中 我想将此文件直接保存到 Azure Blob 中 我不希望文件存储在本地然后上传到 blob 我尝试在文件夹变量中给出 blob 位置 但它不起作用 我有一个 excel 文件
  • 如何使用 Webpack 设置 React 组件的私有共享库

    我在多个 Webpack 项目中使用了许多 React 组件 我想通过 NPM 共享它们 所以我很自然地 将这些组件放入 私有 GitHub 存储库中 将该存储库添加到主项目中package json 为了能够同时在组件库上进行开发 我使用
  • HTML 下载和文本提取

    下载 URL 列表并仅提取文本内容的好工具或工具集是什么 不需要蜘蛛 但可以控制下载文件名 并且线程将是一个额外的好处 平台是linux wget http linux die net man 1 wget html2ascii http
  • 创建 CA 证书的 x.509 V3 扩展基本约束和密钥用法有什么区别?

    这两个动作似乎做了同样的事情 使用基本约束X 509 证书中的扩展名以表明它是 CA 证书 并且 使用按键用法扩展名例如表示公钥可用于证书签名 这些扩展有什么区别 它们是否有相同的目的或相辅相成 密钥用法 定义了可以使用证书中包含的密钥执行
  • Postgres pg_dump 缓存查找索引失败

    我正在尝试使用以下命令创建 postgres 数据库的备份 省略详细信息 pg dump h host p 5432 U user db gt db sql 一段时间后 我收到错误 已格式化 pg dump archiver db quer
  • 启动期间生成的 ELF 可执行文件段错误

    我正在生成一个 ELF 可执行文件 并将 text 部分加载到 LOAD 段中 它可以很好地拆卸 但尝试在下面运行它gdb gives During startup program terminated with signal SIGSEG
  • 如何在CSS中设置超细“font-weight”(小于100)?

    我想让文字超细 小于 font weight 100 这可以用 CSS 来做吗 Like this but with helvetica 处理 Web 字体时 CSS 字体粗细不会 使字体变细 或加粗 对于未从 url 加载的字体font
  • XML 序列化问题 - 如何序列化一个对象中的元素、属性和文本

    我是使用 NET 进行 XML 序列化的新手 在使用它一段时间后 我现在感到很困惑 我可以序列化具有包含其他元素的属性的元素 但如何序列化类似的内容
  • lodash:使用不同的对象数组过滤对象数组

    这个问题具体针对lodash https lodash com docs 给定两个对象数组 什么是best way用另一个数组的对象过滤一个数组 我试图提出下面的一个场景 我这样做的方法是使用两个 forEach循环 但我想知道使用 lod
  • 在 C# 中根据引用的 XSD 验证 XML

    我有一个具有指定架构位置的 XML 文件 如下所示 xsi schemaLocation someurl localSchemaPath xsd 我想用 C 进行验证 当我打开文件时 Visual Studio 会根据架构验证它并完美列出错