Compartilhar via


Comparação de objetos usando XmlNameTable

Os XmlDocuments, quando criados, têm uma tabela de nomes criada especificamente para esse documento. Quando XML é carregado no documento ou novos elementos ou atributos são criados, os nomes de atributo e elemento são colocados no XmlNameTable. Você também pode criar um XmlDocument usando um NameTable existente de outro documento. Quando XmlDocuments é criado com o constructo que aceita um parâmetro XmlNameTable, o documento tem acesso aos nomes de nó, namespaces e prefixos já armazenados em 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 de comparação de cadeia de caracteres. Cadeias de caracteres 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, o que também os adiciona à tabela de nomes do documento e a comparação de objetos com os 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 pedido em um site de comércio eletrônico, que estão em conformidade com um esquema XSD (linguagem de definição de esquema XML) ou uma DTD (definição de tipo de documento) e as mesmas cadeias de caracteres são repetidas. O uso da tabela de mesmo nome oferece uma melhoria de desempenho, pois o mesmo nome de elemento ocorre em vários documentos.

Consulte também