如何使用 XmlNamespaceManager 和 NameTable
此示例显示如何从 XmlDocument 选择命名空间特定的 XML 数据。它说明了 XmlNamespaceManager 类的用法。该类封装命名空间的集合,并提供各种命名空间管理任务,如解析命名空间,向集合添加命名空间,或从集合移除命名空间,以及为命名空间提供范围管理。
XmlNameTable 提供 XML 流中字符串名称的管理。它是通过创建原子化字符串对象表来进行管理的。该表为 XML 分析器提供了一种高效的方法,即对 XML 文档中所有重复的元素和属性名使用相同的 String 对象。
该示例使用 XML 路径语言 (XPath) 表达式查询命名空间。有关 XPath 表达式的更多信息,请参阅如何使用 XPath 表达式查询 XML
![]()
[运行示例] | [查看源代码] |
首先,该示例创建一个 XmlDocument 并将 orders.xml 文件加载到 XmlDocument 中。
// Create a new XmlDocument for the specified source file and load it. XmlDocument myXmlDocument = new XmlDocument(); myXmlDocument.Load("orders.xml"); |
||
C# | VB |
为了获取 yourns1 命名空间的所有项元素,该示例使用下列 XPath 表达式://yourns1:item。该示例还创建一个 XmlNamespaceManager,它包含 XML 文档中的前缀和命名空间。
orders.xml 文档定义两个前缀:http://tempuri.org/myUSorderprocessornamespace 的 myns 和 http://tempuri.org/USvendor1namespace 的 yourns1。该文档还有 http://tempuri.org/myUSordersnamespace 的默认命名空间(空前缀)。
//Create a string containing the XPATH expression to evaluate. sExpr = String.Format("//{0}:item", "yourns1"); //Create an XmlNamespaceManager and add the namespaces for the document. XmlNamespaceManager nsmanager = new XmlNamespaceManager(doc.NameTable); //Set default namespace--first param is null. nsmanager.AddNamespace(String.Empty, "http://tempuri.org/myUSordersnamespace"); nsmanager.AddNamespace("myns", "http://tempuri.org/myUSorderprocessornamespace"); nsmanager.AddNamespace("yourns1", "http://tempuri.org/USvendor1namespace"); nsmanager.AddNamespace("yourns2", "http://tempuri.org/USvendor2namespace"); |
||
C# | VB |
然后,该示例在 XmlDocument 上调用 SelectNodes 方法。在这种情况下,SelectNodes 方法查找带有 yourns1 前缀的所有项节点,该前缀解析为命名空间 http://tempuri.org/USvendor1namespace。
SelectNodes 方法返回一个 XmlNodeList。然后该示例显示此节点列表。
XmlNodeList nodelist = myXmlDocument.SelectNodes(exprString, nsmanager); foreach (XmlNode myXmlNode in nodelist) { DisplayTree(myXmlNode); } |
||
C# | VB |
摘要
- XmlNamespaceManager 类解析命名空间,向集合添加命名空间,以及从集合移除命名空间。
- 应用程序可使用 XmlNameTable 提高 XML 分析器的性能。