Partilhar via


Comparação de objetos usando XmlNameTable

XmlDocuments, quando criado, tem uma tabela de nomes criada especificamente para esse documento. Quando o XML é carregado no documento ou novos elementos ou atributos são criados, os nomes de atributos e elementos são colocados no XmlNameTable. Você também pode criar um XmlDocument usando um NameTable existente de outro documento. Quando XmlDocuments são criados com o construtor que usa um parâmetro XmlNameTable , o documento tem acesso aos nomes de nó, namespaces e prefixos já armazenados no XmlNameTable. Independentemente de como a tabela de nomes é carregada com nomes, uma vez que os nomes são armazenados na tabela, os nomes podem ser comparados rapidamente usando a comparação de objetos em vez da comparação de cadeia de caracteres. Strings também podem ser adicionadas à tabela de nomes usando o Add. O exemplo de código a seguir mostra uma tabela de nomes sendo criada e a cadeia de caracteres MyString sendo adicionada à tabela. Depois disso, um XmlDocument é criado usando essa tabela e os nomes de elemento e atributo em Myfile.xml são adicionados à tabela de nomes existente.

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");  

O exemplo de código a seguir mostra a criação de um documento, dois novos elementos sendo adicionados ao documento, que também os adiciona à tabela de nomes do documento e a comparação de objetos nos nomes.

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))  
{ ...  

O cenário acima de uma tabela de nomes passada entre dois documentos é típico quando o mesmo tipo de documento está sendo processado repetidamente, como documentos de pedidos em um site de comércio eletrônico, que estão em conformidade com um esquema de linguagem de definição de esquema XML (XSD) ou definição de tipo de documento (DTD) e as mesmas cadeias de caracteres são repetidas. O uso da mesma tabela de nomes proporciona uma melhoria de desempenho, pois o mesmo nome de elemento ocorre em vários documentos.

Consulte também