首页 > 解决方案 > 使用 XPathDocument 从带有命名空间的 XML 中选择节点期间的架构文件缓存

问题描述

我正在使用XPathDocument从包含名称空间的 XML 中选择节点。添加了适当的命名空间:

XmlNamespaceManager nsmgr = new XmlNamespaceManager(nav.NameTable);
nsmgr.AddNamespace("nsABC", @"http://www.thesite.com/xsd/XYZ123.xsd");

使用 选择节点后Select("XPathExpression")

  1. xsd每次执行 Select 方法时会从外部服务器下载文件吗?
  2. 文件会xsd在应用程序生命周期内下载一次并缓存,还是在系统中?

在 中提供错误的 URI 会导致nsmgr.AddNamespace无法Select识别节点,因此这证明它必须知道xsd文件,因此必须下载它。

  1. 第一次在没有互联网访问的其他 PC 上运行应用程序怎么样,没有机会在xsd任何地方缓存它。'xsd' 是从哪里获取的?我已经测试了这个选项并且代码被正确执行。

标签: c#.netxpath

解决方案


一次回答所有三个问题: 不。.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#”


推荐阅读