XPath é muito mais eficiente em comparação com DOM e SAX?
Pergunta
Eu preciso para analisar uma string XML e encontrar valores de nós de texto específicos, valores de atributos etc. Estou fazendo isso em javascript e estava usando a classe DOMParser para o mesmo. Mais tarde fui informado de que DOM é preciso uma grande quantidade de memória e SAX é uma opção melhor.
Recentemente eu descobri que XPath também fornece uma maneira simples de encontrar nós.
Mas eu não tenho certeza que entre estes 3 seria a maneira mais eficiente para XML de análise. ajuda gentilmente ....
Solução
SAX é um analisador top-down e permite o acesso de série para um documento XML, e funciona bem para acesso somente leitura. DOM, por outro lado é mais robusto - ele lê todo o documento XML em uma árvore, e é muito eficiente quando você deseja alterar, adicionar, excluir dados Remover naquela árvore XML. XPath é útil quando você só precisa de um par de valores a partir do documento XML, e você sabe onde encontrá-los (você sabe o caminho dos dados, / root / artigo / challange / texto).
SAX: Tempo eficiente quando a iteração através do documento, dá uma única passagem para cada iteração
DOM: Flexível / performance, dá-lhe mais maneiras de trabalhar os seus dados
XPath: Tempo eficiente quando você só precisa ler um par de valores
Outras dicas
A menos que você está usando o protótipo de streaming de XPath , é pesquisa muito provável que o seu motor de XPath está a carregar tudo na memória, por isso vai ter características semelhantes às DOM. Por isso, em vez depende de sua definição de 'eficiência'. É certamente mais fácil de usar, e as implementações XPath poderia mudar para ser mais eficiente, enquanto DOM sempre terá alguma representação de todo o documento na máquina do cliente, e SAX será sempre muito mais complicado de programa de XPath.
Este documento do MSDN oferece uma riqueza de informações sobre como otimizar o processamento XML .
Em particular, a classe XPathDocument é projetado para ser mais eficiente para avaliar expressões XPath do que usar (baseada no DOM) da classe XmlDocument. A razão é que XPathDocument é uma representação só de leitura de um documento XML, enquanto uma implementação DOM abrange também alterar o documento.
Usando o DOM tem uma desvantagem não menos importante que normalmente resulta em complicado, espaguete-como código que é difícil de entender e manter.
http://code.google.com/p/jlibs/wiki/ XMLDog
Nós damos conjunto de XPaths para XMLDog e pedir para farejar algum documento XML. Ele usa SAX e com uma passagem sobre o documento avalia todos os dados XPaths.
Se você só precisa encontrar valores de nós de texto específico, então XPath. A razão DOM ocupa muita memória é porque ele lê em todo o XML e formam a árvore para o documento. SAX é baseado em eventos. Assim, com base no que você descreveu, XPath melhores ternos seu cenário.