XmlNamespaceManager与XmlDocument.NameTable浅述

发布时间 2023-05-05 22:29:19作者: JohnYang819
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
XmlNamespaceManager nsmgr=new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("ns", "http://WebXml.com.cn/");
var nodes = doc.SelectNodes("//ns:string", nsmgr);

NameTable属性:
在XML文档中,元素和属性的名称、命名空间、前缀等信息都以字符串形式存在。为了避免在XML文档中重复创建这些字符串,造成内存的浪费,.NET Framework提供了一个NameTable类,用于创建和存储XML文档中使用的字符串对象。NameTable类实现了一个字符串池,它确保任何在XML文档中使用的字符串只被存储一次。

XmlDocument类中的NameTable属性是一个公共的XmlNameTable对象,它用于存储XML文档中所有命名空间和元素的名称。当创建一个新的XmlDocument对象时,它会自动创建一个新的NameTable对象,并将其作为NameTable属性的值。NameTable对象可用于创建和管理XmlDocument对象中使用的所有字符串对象,如元素名称、属性名称、命名空间前缀等。在多个XmlDocument对象中使用相同的NameTable对象,可以实现字符串共享和内存的节省。

在XmlNamespaceManager类中,如果使用与XmlDocument对象相同的NameTable对象,可以确保XmlDocument对象和XmlNamespaceManager对象共享相同的字符串池,从而避免内存浪费。因此,在创建XmlNamespaceManager对象时,通常会将XmlDocument对象的NameTable属性作为参数传递给XmlNamespaceManager类的构造函数。

nsmgr.AddNamespace("ns", "http://WebXml.com.cn/");这行代码定义了一个名为"ns"的命名空间前缀,并将其与"http://WebXml.com.cn/"命名空间URI关联起来。这个命名空间前缀可以被用于选择符合该命名空间的XML节点。

var nodes = doc.SelectNodes("//ns:string", nsmgr);这行代码使用XPath表达式"//ns:string"从XML文档中选择所有命名空间前缀为"ns"、元素名为"string"的XML节点。其中,doc.SelectNodes()方法的第一个参数是XPath查询表达式,第二个参数是XmlNamespaceManager对象,用于识别和处理该XPath查询表达式中使用的命名空间。查询结果以XmlNodeList形式返回,可以对其进行进一步的处理和操作。