c# - 使用 XPathDocument 从带有命名空间的 XML 中选择节点期间的架构文件缓存
问题描述
我正在使用XPathDocument
从包含名称空间的 XML 中选择节点。添加了适当的命名空间:
XmlNamespaceManager nsmgr = new XmlNamespaceManager(nav.NameTable);
nsmgr.AddNamespace("nsABC", @"http://www.thesite.com/xsd/XYZ123.xsd");
使用 选择节点后Select("XPathExpression")
:
xsd
每次执行 Select 方法时会从外部服务器下载文件吗?- 文件会
xsd
在应用程序生命周期内下载一次并缓存,还是在系统中?
在 中提供错误的 URI 会导致nsmgr.AddNamespace
无法Select
识别节点,因此这证明它必须知道xsd
文件,因此必须下载它。
- 第一次在没有互联网访问的其他 PC 上运行应用程序怎么样,没有机会在
xsd
任何地方缓存它。'xsd' 是从哪里获取的?我已经测试了这个选项并且代码被正确执行。
解决方案
一次回答所有三个问题: 不。.xsd
文件不会被下载 - 无论是在第一次运行还是在接下来的运行中。通过添加命名空间 URI
nsmgr.AddNamespace("nsABC", @"http://www.thesite.com/xsd/XYZ123.xsd");
您只需在命名空间前缀和命名空间 URI 之间创建一个链接。后者定义为
该属性的值(URI 引用)是标识命名空间的命名空间名称。命名空间名称,为了达到其预期目的,应该具有唯一性和持久性的特征。它不是直接可用于检索模式(如果存在)的目标。考虑到这些目标而设计的语法示例是统一资源名称 [RFC2141]。但是,应该注意的是,可以以实现这些相同目标的方式管理普通 URL。
针对 XSD 模式下载和验证 XML 必须单独完成。一个使用示例XmlDocument
是“Validating an XML against referenced XSD in C#”。
推荐阅读
- javascript - 给定 ES6 中没有循环的初始对象列表,如何构建一个新的对象列表,每个对象都有一个新属性?
- google-cloud-datastore - 数据存储:使用自动生成的密钥 ID 在同一事务中保存具有后继者的实体
- android - Google 登录适用于原始 APK,但不适用于派生 APK,即使我向 Firebase 添加了正确的 SHA-1
- sql-server - 左连接的 SQL 计数
- javascript - 使用 JavaScript 获取 DOM 元素的父级
- ios - 如何在 UITableView Swift 中删除所有类型的单元格
- sql - 如何选择间隔为 30 秒的时间戳之间的数据
- r - 从大型数据集的数据框有效地创建矩阵
- cassandra - 数据迁移到 cassandra 时如何处理错误
- html - angular 5 中动态元素的可访问性