0

0

C# XmlSchemaSet怎么用 编译和缓存XSD

月夜之吻

月夜之吻

发布时间:2025-12-27 13:45:50

|

820人浏览过

|

来源于php中文网

原创

XmlSchemaSet 是 .NET 中编译、验证和缓存 XSD 的核心类,支持多模式合并、依赖解析与线程安全复用;需手动添加所有 import/include 的 Schema 并调用 Compile(),配合 ValidationEventHandler 可调试错误。

c# xmlschemaset怎么用 编译和缓存xsd

XmlSchemaSet 是 .NET 中用于编译、验证和缓存 XML Schema(XSD)的核心类。它替代了已过时的 XmlSchemaCollection,支持多模式合并、重复定义检测、命名空间隔离,并能高效复用已编译的 Schema。

加载并编译单个 XSD 文件

最常见场景是读取本地 .xsd 文件,编译成可验证的内部表示:

  • 创建 XmlSchemaSet 实例(可指定 XmlNameTable 优化性能)
  • 调用 Add() 方法传入目标命名空间和文件路径(或 XmlReader
  • 调用 Compile() —— 此步真正解析语法、检查约束、构建验证模型

示例:

var schemas = new XmlSchemaSet();
schemas.Add("http://example.com/order", "order.xsd"); // 命名空间必须匹配 targetNamespace
schemas.Compile(); // 编译失败会抛出 XmlSchemaException

编译多个关联的 XSD(含 import/include/redefine)

XmlSchemaSet 自动处理 ,前提是所有被引用的 Schema 都已加入集合中:

  • 先添加被依赖的 Schema(如公共类型库),再添加引用它的主 Schema
  • 命名空间必须严格匹配 targetNamespace,否则 import 无法解析
  • Compile() 会递归解析全部依赖,发现循环引用或缺失文件时抛异常

注意:不支持从 HTTP URL 自动下载远程 schemaLocation,需手动加载并 Add 所有依赖项。

Looka
Looka

AI辅助Logo和品牌设计工具

下载

缓存与复用已编译 Schema

编译后的 XmlSchemaSet 是线程安全的,可全局共享,避免重复编译开销:

  • 推荐作为静态字段或 DI 容器单例管理
  • 后续验证时直接传给 XmlReaderSettings.Schemas 即可复用
  • 若需动态更新(如热重载 XSD),应新建 XmlSchemaSet 并替换旧实例,避免并发修改问题

验证示例:

var settings = new XmlReaderSettings { Schemas = schemas };
settings.ValidationType = ValidationType.Schema;
using var reader = XmlReader.Create("order.xml", settings);
while (reader.Read()) { } // 触发验证

调试编译错误与自定义验证回调

编译或验证失败时,默认只抛异常。可通过 ValidationEventHandler 捕获详细信息:

  • Add() 前或 Compile() 前设置 schemas.ValidationEventHandler
  • 事件参数 ValidationEventArgs 包含错误级别(Warning/ Error)、消息、源文件和行号
  • 对 warning 可选择忽略,error 则通常中断流程

示例:

schemas.ValidationEventHandler += (sender, e) =>
{
    Console.WriteLine($"{e.Severity}: {e.Message} at {e.Exception?.LineNumber}");
};

相关专题

更多
pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1843

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2080

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

914

2024.11.28

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

184

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

259

2023.10.25

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

465

2023.08.10

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

250

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

382

2023.11.14

ip地址修改教程大全
ip地址修改教程大全

本专题整合了ip地址修改教程大全,阅读下面的文章自行寻找合适的解决教程。

27

2025.12.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.1万人学习

好课诞生记
好课诞生记

共20课时 | 5.9万人学习

swift开发文档
swift开发文档

共33课时 | 17.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号