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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top