使用 XmlNameTable 进行对象比较

XmlDocuments 在创建时,具有专门为该文档创建的名称表。 当 XML 加载到文档中或创建新元素或属性时,属性和元素名称将放入 XmlNameTable 中。 还可以使用另一个文档中的现有 NameTable 创建 XmlDocument。 当使用采用 XmlNameTable 参数的构造函数创建 XmlDocuments 时,文档可以访问已存储在 XmlNameTable 中的节点名称、命名空间和前缀。 无论名称表如何加载名称表,一旦名称存储在表中,就可以使用对象比较而不是字符串比较来快速比较名称。 还可以使用 Add 将字符串添加到名称表中。 下面的代码示例展示了如何创建名称表,并将字符串MyString添加到该表中。 之后,将使用该表创建 XmlDocumentMyfile.xml 中的元素和属性名称将添加到现有名称表中。

Dim nt As New NameTable()  
nt.Add("MyString")  
Dim doc As New XmlDocument(nt)  
doc.Load("Myfile.xml")  
NameTable nt = new NameTable();  
nt.Add("MyString");  
XmlDocument doc = new XmlDocument(nt);  
doc.Load("Myfile.xml");  

下面的代码示例展示了如何创建一个文档,如何添加两个新元素到文档中,这些元素也会因此被添加到文档名称表中,以及在名称上的对象比较。

Dim doc1 As XmlDocument = imp.CreateDocument()  
Dim node1 As XmlElement = doc.CreateElement("node1")  
Dim doc2 As XmlDocument = imp.CreateDocument()  
Dim node2 As XmlElement = doc.CreateElement("node2")  
if (CType(node1.Name, object) = CType(node2.Name, object))  
XmlDocument doc1 = imp.CreateDocument();  
node1 = doc1.CreateElement ("node1");  
XmlDocument doc2 = imp.CreateDocument();  
node2 = doc2.CreateElement ("node1");  
if (((object)node1.Name) == ((object)node2.Name))  
{ ...  

当重复处理相同类型的文档时,例如电子商务网站中的订单文档,符合 XML 架构定义语言(XSD)架构或文档类型定义(DTD),并且相同的字符串被重复时,在两个文档之间传递名称表的上述方案是典型的。 使用同一名称表可提高性能,因为多个文档中出现相同的元素名称。

另请参阅