使用 XSD 架构进行 Xml 验证

2023-12-20

以下代码帮助我使用 XSD 架构验证 XML 文件。

XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add(null, xsdFilePath);
settings.ValidationType = ValidationType.Schema;
settings.ValidationEventHandler += new System.Xml.Schema.ValidationEventHandler(settings_ValidationEventHandler);
XmlDocument document = new XmlDocument();
document.Load(xmlFilePath);
XmlReader rdr = XmlReader.Create(new StringReader(document.InnerXml), settings);

while (rdr.Read())
{

}
isValid = true;

ValidationEventHandler 还告诉我错误是什么,但没有告诉我它们位于“哪里”或“哪一行”。有什么方法可以获取 XML 验证失败的行号吗?


这不正是你所追求的吗?

创建一个XmlReaderSettings对象并通过该对象启用警告。

不幸的是,似乎没有办法通过你自己的XmlReaderSettings反对XmlDocument.Validate().
相反,您可以使用验证XmlReader and an XmlNodeReader验证现有的XmlDocument(用一个XmlNodeReader with StringReader而不是一个XmlDocument)

XmlDocument x = new XmlDocument();
x.LoadXml(XmlSource);

XmlReaderSettings settings = new XmlReaderSettings();
settings.CloseInput = true;     
settings.ValidationEventHandler += Handler;

settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add(null, ExtendedTreeViewSchema);
settings.ValidationFlags =
     XmlSchemaValidationFlags.ReportValidationWarnings |
XmlSchemaValidationFlags.ProcessIdentityConstraints |
XmlSchemaValidationFlags.ProcessInlineSchema |
XmlSchemaValidationFlags.ProcessSchemaLocation ;

StringReader r = new StringReader(XmlSource);

using (XmlReader validatingReader = XmlReader.Create(r, settings)) {
        while (validatingReader.Read()) { /* just loop through document */ }
}

和处理程序:

private static void Handler(object sender, ValidationEventArgs e)
{
        if (e.Severity == XmlSeverityType.Error || e.Severity == XmlSeverityType.Warning)
          System.Diagnostics.Trace.WriteLine(
            String.Format("Line: {0}, Position: {1} \"{2}\"",
                e.Exception.LineNumber, e.Exception.LinePosition, e.Exception.Message));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 XSD 架构进行 Xml 验证 的相关文章

  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 为什么基类必须有一个带有 0 个参数的构造函数?

    这不会编译 namespace Constructor0Args class Base public Base int x class Derived Base class Program static void Main string a
  • 如果.Net Core可以在Windows上运行,为什么不能在.Net Framework中引用.Net Core DLL?

    我明白为什么 Net Framework 可能会在 Net Core IE 中导致问题 因为不存在特定于 Windows 平台的 API 但是为什么不能直接引用 Net Core 作为 Net Framework 中的库呢 如果 Net C
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • 在 C++11 中省略返回类型

    我最近发现自己在 C 11 模式下的 gcc 4 5 中使用了以下宏 define RETURN x gt decltype x return x 并编写这样的函数 template
  • ASP .NET MVC,创建类似路由配置的永久链接

    我需要帮助在 MVC 网站中创建类似 URL 路由的永久链接 Slug 已设置为 www xyz com profile slug 代码为 routes MapRoute name Profile url profile slug defa
  • 获取从属性构造函数内部应用到哪个属性的成员?

    我有一个自定义属性 在自定义属性的构造函数内 我想将属性的属性值设置为属性所应用到的属性的类型 是否有某种方式可以访问该属性所应用到的成员从我的属性类内部 可以从 NET 4 5 using CallerMemberName Somethi
  • 如何用 kevent() 替换 select() 以获得更高的性能?

    来自Kqueue 维基百科页面 http en wikipedia org wiki Kqueue Kqueue 在内核和用户空间之间提供高效的输入和输出事件管道 因此 可以修改事件过滤器以及接收待处理事件 同时每次主事件循环迭代仅使用对
  • gdb 在 docker 上立即退出“进程已完成,退出代码 1”或 lldb“数据包返回错误 8”。另外:如何在 docker 中允许进行 C++ 调试

    这花了我一整天的时间才找到 所以我将其发布以供将来参考 我正在 docker 镜像上开发 C 我正在使用克利翁 我的代码是在调试模式下编译的 并且在运行模式下运行良好 但是当尝试调试时 进程会立即退出 并显示非常丰富的信息 Process
  • 单元测试失败,异常代码为 c0000005

    我正在尝试使用本机单元测试项目在 Visual Studios 2012 中创建单元测试 这是我的测试 TEST METHOD CalculationsRoundTests int result Calculations Round 1 0
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 是 ValidationFailed 默认值

    会用什么方法facesContext isValidationFailed 当验证失败时 在渲染响应阶段后返回 它返回false对于我来说 它只会返回true when FacesContext validationFailed http
  • 为什么 Ajax.BeginForm 在 Chrome 中不起作用?

    我正在使用 c NET MVC2 并尝试创建一个 ajax 表单来调用删除数据库记录 RemoveRelation 的方法 删除记录的过程正在按预期进行 删除记录后 表单应调用一个 JavaScript 函数 从视觉效果中删除该记录 Rem
  • 以编程方式使用自定义元素创建网格

    我正在尝试以编程方式创建一个网格 并将自定义控件作为子项附加到网格中 作为 2x2 矩阵中的第 0 行第 0 列 为了让事情变得更棘手 我使用了 MVVM 设计模式 下面是一些代码可以帮助大家理解这个想法 应用程序 xaml cs base
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • 在基类集合上调用派生方法

    我有一个名为 A 的抽象类 以及实现 A 的其他类 B C D E 我的派生类持有不同类型的值 我还有一个 A 对象的列表 abstract class A class B class A public int val get privat
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12
  • WPF/数据集:如何通过 XAML 将相关表中的数据绑定到数据网格列中?

    我正在使用 WPF DataSet 连接到 SQL Server Express XAML 和 C Visual Studio 2013 Express 我从名为 BankNoteBook 的现有 SQL Server Express 数据

随机推荐

  • 如果基本 href 设置为“/”以外的值,AngularJS 漂亮的 url 无法在页面刷新时工作

    我是 AngularJS 的新手 我目前在为我的视图编写漂亮的网址时遇到问题 我已经设置了 locationProvider html5Mode true 去除 来自地址栏中显示的 url 但是 这样做后我无法重新路由到所需的视图 我不断收
  • SignalR 背板的可靠性如何?

    对于所有消息是否会到达所有订阅节点的问题 SignalR Backplane 的可靠性如何 底层是否使用可靠的协议 或者消息是否有可能丢失 显然 例如 由于某些网络问题 一个节点可能会关闭一段时间 当再次可达时 SignalR Backpl
  • 如何将 int 变量分配给 int 数组 int C++? [复制]

    这个问题在这里已经有答案了 我想实现数学运算并写入数组 我以 int 形式发送参数 但错误提示数组下标的类型 int int 无效 string clients 5 2 string products 7 string strPrices
  • 在 Web Api 2 中使用 Url.Link 和属性路由

    我想在使用 webapi 2 时向我的 http 响应添加 Location 标头 下面的方法展示了如何使用命名路由来执行此操作 有谁知道是否可以使用作为 webapi 2 的一部分发布的属性路由功能创建 Url Link string u
  • PHP 致命错误:允许的内存大小 1073741824 字节耗尽(尝试分配 16777216 字节)

    I ran 作曲家安装 on my 16 GBMacbook Pro 我得到了这个 distributor portal composer install Loading composer repositories with package
  • 循环跳过偶数

    I 代表全局变量 即名称 I 代表函数内部和外部相同的变量 当 I 1 时 事实首先被调用 这是第一个写入的值 这个值是 传递给函数的虚拟参数 N 同样的 I 现在被 Fact 内部的 DO 循环赋予初始值 2 但由于它大于 N 所以不执行
  • 增加504超时错误

    有什么方法可以使错误 504 网关超时更长 如果可以的话 如何以及更改它的文件位于何处 我在centos 6上使用nginx 根据您拥有的网关类型 您应该使用类似以下内容的内容 proxy read timeout 600s 检查文档 ht
  • 在 Yii2 中,如何从视图文件中的渲染中排除布局?

    我有一个管理员登录页面 我想在没有布局的情况下呈现它 如何在 Yii2 中渲染视图而不渲染主布局 这可以使用以下方法完成renderPartial method 您可以从官方文档中获取更多信息 这是a link http www yiifr
  • 如何使用 symfony2 包含 stripe 客户端 api。如何在 symfony2 中包含没有类的文件

    我试图将此文件包含在我的 symfony2 项目中 该项目是一个包含一堆 require 语句的文件 不幸的是 该文件不包含类 我不想为所有包含我需要的类的包含文件手动编写命名空间 所以我想知道如何以包含我需要的其他文件的方式包含该文件 我
  • CSS 关键帧仅适用于 Chrome

    我正在尝试使用关键帧制作一个简单的动画 但它仅适用于 Chrome 这是代码 为了更短的帖子 我只包含一次关键帧代码 keyframes logokf 0 background image url gfx logo1 png 20 back
  • 使用 mysql 别名从 2 个表中选择列

    我有 2 个表 table a 和 table b 两者都包含一个名为 open 的列 table a open 36 99 36 85 36 40 36 33 36 33 table b open 4 27 4 46 4 38 4 22
  • 无法使用 Flask 服务器在 IIS 上运行 dash 应用程序

    我的 IIS Windows Server 2016 上有两个网站 都使用 Dash 和 Flask 第一个是最小的working由 app py 和 web config 组成的示例 由于某种原因 我无法让第二个站点正常工作 下面附有两个
  • 如何处理 d3.layout.stack() 中缺少数据点的图层

    我正在使用 d3 stack 创建堆积面积图 但如果每层中的项目数量不相等 则会出现错误 我从这样的数据数组开始 key Group1 value date key Group1 value date key Group1 value da
  • 响应所有方法调用的 Python 类的实例

    有没有办法创建一个实例响应任意方法调用的类 我知道有一个特殊的方法 getattr self attr 当有人尝试访问实例的属性时会调用它 我正在寻找类似的东西 使我也能够拦截方法调用 期望的行为看起来像这样 class A object
  • 有没有一种算法可以检测两幅图像之间的差异?

    我正在寻找一种算法或库 可以发现两个图像之间的差异 例如在 查找错误 游戏中 并输出包含这些更改的边界框的坐标 我对 Python C 或几乎任何其他语言的算法持开放态度 如果您只是想显示差异 那么您可以使用下面的代码 FastBitmap
  • 如何从 R 中的 xlsx 文件中检测“删除线”样式

    我必须检查包含 的数据删除线 在 R 中导入 excel 文件时的格式 我们有什么方法可以检测到它们吗 欢迎使用 R 和 Python 方法 R 溶液 the tidyxl 包可以帮助你 例如 temp xlsx 其中数据位于第一张纸的 A
  • 如何在 Eclipse 中使用 Android 操作系统 VirtualBox 作为设备

    我在这里找到了有关如何运行 Android 操作系统的教程 http www javacodegeeks com 2010 06 install android os on pc with html http www javacodegee
  • jQuery 文档.ready

    我对 jQuery 中的 document ready 有点困惑 你什么时候在里面定义javascript函数 document ready 什么时候不呢 将所有 javascript 代码放入 document ready 中是否足够安全
  • gnuplot 文件有标准的文件扩展名吗?

    我见过 gnu plt and gplot作为 gnuplot 脚本的文件扩展名 我知道 Linux 不关心文件扩展名 但是什么扩展名最普遍地向人类声明 我是一个 gnuplot 脚本 正如罗曼 珀森博士和尼尔布都指出的那样这篇维基教科书文
  • 使用 XSD 架构进行 Xml 验证

    以下代码帮助我使用 XSD 架构验证 XML 文件 XmlReaderSettings settings new XmlReaderSettings settings Schemas Add null xsdFilePath setting