新闻中心

C#怎么用XSD验证XML文件的有效性

2025-12-13
浏览次数:
返回列表
在C#中用XSD验证XML需三步:加载XSD到XmlSchemaSet并赋给XmlReaderSettings.Schemas;设置ValidationType.Schema并订阅ValidationEventHandler;用XmlReader.Create创建验证读取器,循环Read()完*量验证。

c#怎么用xsd验证xml文件的有效性

在C#中用XSD验证XML文件,核心是使用 XmlSchemaSet 加载XSD,再通过 XmlReaderSettings 启用验证,并创建带验证功能的 XmlReader 来读取XML。只要XML内容不符合XSD定义的结构或数据类型,就会触发验证事件并报告错误。

准备XSD和XML文件

确保你有配套的XSD文件(如 data.xsd)和待验证的XML文件(如 data.xml)。XSD必须能正确描述XML的元素、属性、命名空间和数据类型。如果XML用了命名空间,XSD中对应 targetNamespace 必须匹配,且XML根节点要声明相同命名空间。

加载XSD并配置验证设置

XmlSchemaSet 加载XSD,再将其赋给 XmlReaderSettings.Schemas;同时把 ValidationType 设为 ValidationType.Schema,并订阅 ValidationEventHandler 捕获错误:

  • 不设置 ValidationEventHandler 时,验证失败会直接抛出 XmlSchemaValidationException
  • 推荐用事件方式收集所有错误,而不是中断处理
  • 若XSD引用了其他XSD(如 xs:includexs:import),确保路径可访问,或用 XmlSchemaSet.Add() 显式加载全部

执行验证并获取结果

XmlReader.Create(string, XmlReaderSettings) 创建验证型读取器,然后调用 Read() 遍历整个XML——验证会在读取过程中自动发生:

拾贝 拾贝

一键同步微信读书所有笔记和划线,并在新标签页回顾

拾贝 186 查看详情 拾贝
  • 验证通过:不会触发事件,程序正常结束
  • 验证失败:ValidationEventHandler 中的回调被调用,参数 ValidationEventArgs 包含错误级别(WarningError)、消息和异常详情
  • 注意:只调用一次 Read() 不够,需循环读到 XmlNodeType.EndDocument 才完*量验证

一个最小可用示例

以下代码片段可直接运行(假定文件在当前目录):

var settings = new XmlReaderSettings();
settings.Schemas.Add("", "data.xsd"); // 空字符串表示无目标命名空间
settings.ValidationType = ValidationType.Schema;
settings.ValidationEventHandler += (s, e) =>
    Console.WriteLine($"[{e.Severity}] {e.Message}");

using var reader = XmlReader.Create("data.xml", settings);
while (reader.Read()) { } // 触发完整验证

如果XSD定义了命名空间,Add("", ...) 要换成 Add("http://my.ns", ...),且XML中对应 xmlns="http://my.ns"

基本上就这些。关键不是“能不能”,而是XSD是否写对、命名空间是否对齐、事件是否接住——三者缺一不可。

以上就是C#怎么用XSD验证XML文件的有效性的详细内容,更多请关注其它相关文章!


# 你有  # 推广营销方式小红书  # 江西网站排名优化平台  # 单页seo如何制作  # 沈阳企业seo怎么做  # 网站推广了没效果怎么办  # 阳江网站建设主题  # 衢州关键词排名厂  # 吕梁网站建设靠谱吗  # 丽水网站推广外包  # 无锡个人网站建设活动公司  # node  # 并在  # 会在  # 设为  # 遍历  # 如何在  # 就会  # 拾贝  # 如何选择  # 加载  # c# 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 没有大陆身份证/银行卡如何实名微信? 亲测有效的几种方法分享  Adobe PDF表单中利用J*aScript解析与格式化日期组件的教程  微博网页版首页入口 微博电脑端官网登录链接  MinIO大规模对象列表性能瓶颈深度解析与外部元数据管理策略  《GTA6》开发画面疑似泄露!这次可不是AI了  Angular中单选按钮的正确使用与常见陷阱解析  汽水音乐在线版入口_汽水音乐网页播放手册  Win11网速慢怎么解决 Win11网络设置优化解除限速  Python getattr() 异常处理深度解析:避免程序意外退出  qq浏览器如何查看和导出已保存的密码 qq浏览器密码管理器数据备份教程  php源码怎么在电脑上测试_电脑测试php源码方法步骤【教程】  使用CSS更改登录屏幕输入框中PNG图标颜色的策略与局限性  如何在CSS中使用浮动制作导航栏_float实现水平菜单  MAC如何将整个网页截长图_MAC使用Safari的导出为PDF或第三方工具  mc.js官网登录入口 mc.js官方登录入口最新版  微信群消息显示延迟如何解决 微信群消息刷新优化方法  随机参数递归函数的基准调用次数与时间复杂度探究  Mac怎么查看崩溃日志_Mac控制台错误报告分析  如何在J*a中使用Locale处理多语言环境  MAC怎么在地图App里使用“四处看看”_MAC体验部分城市的3D实景街景  J*a里如何使用N*igableMap进行导航操作_可导航Map操作技巧解析  不会效仿卡普空!《铁拳》制作人澄清:不采取赛事付费|直播|  Typer应用中灵活处理命令行参数的令牌化与解析  12306选座如何查看座位示意图_12306座位示意图解读与使用  QQ邮箱网页版快速登录 QQ邮箱邮箱账号官方入口地址  QQ邮箱官方邮箱登录入口 QQ邮箱网页版快速访问  J*a应用集成GitHub CLI与API认证指南  C++编译期如何执行复杂计算_C++模板元编程(TMP)技巧与应用  12306几点到几点不能订票? | 官方最新系统维护时间全解析  Win11怎么用U盘重装系统 Win11制作启动盘并重装系统完整教程【详解】  Angular Material 垂直步进器:实现底部到顶部排序的教程  印象笔记如何设提醒任务防漏执行_印象笔记设提醒任务防漏执行【任务提醒】  现代化 SciPy 一维插值:interp1d 的替代方案与最佳实践  漫蛙漫画官方首页 漫蛙2漫画在线阅读入口  自定义Bag-of-Words实现:处理带负号的词汇权重  深入理解J*a编译器的兼容性选项:从-source到--release  在J*a中如何开发简易电子商务商品管理系统_商品管理系统项目实战解析  Win10怎么制作U盘启动盘 Win10系统安装U盘制作教程【详解】  Golang如何通过reflect操作map_Golang reflect map操作与遍历技巧  Surface怎么安装系统 微软Surface Pro U盘重装win11教程  Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】  德邦快递查询平台 德邦快递物流信息查询入口  Lar*el Form Request中唯一性验证在更新操作中的正确实现  163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航  PDF怎么合并PDF并保持格式_PDF合并文件保持排版教程  如何创建没有密码的Windows本地账户_跳过微软账户登录的技巧【教程】  解决Python单元测试中Mock异常方法调用计数为零的问题  Win11怎么关闭触摸屏_Windows 11禁用HID符合标准触摸屏  如何在离线环境中使用Composer_Composer离线安装依赖包的技巧与策略  J*a中实现Go语言select通道多路复用机制 

搜索