260 votes

Quelle est la différence entre SAX et DOM?

J'ai lu quelques articles sur le XML d'analyseurs. Là, j'ai pu trouver SAX et DOM.

SAX est basée sur les événements et les DOM est l'arborescence du modèle. Je ne comprenais pas le sens de l'événement base et de modèle d'arbre. Permettez-moi de explique pourquoi ce que j'ai compris, basée sur les événements signifie une sorte d'événements qui se passe au nœud.Comme lorsque l'on clique nœud particulier, puis il vous donnera toutes les sous-nœuds plutôt que de se charger de tous les nœuds dans le même temps.

Mais dans le cas de DOM parser il va charger tous les nœuds et rend le modèle d'arbre. Est-ce exact? S'il vous plaît corrigez-moi Si je me trompe. Ou s'il vous plaît m'expliquer basée sur les événements et treemodel plus en plus simple.

322voto

sparkymat Points 4619

Eh bien, vous êtes à proximité.

SAX, des événements sont déclenchés lorsque le fichier XML est analysé. Lorsque l'analyseur est de parser le XML, et rencontre une balise de départ (par exemple, <something>), puis il déclenche l' tagStarted événement (nom réel de l'événement peut être différente). De même, lorsque la fin de la balise est rencontré lors de l'analyse (</something>), il déclenche tagEnded. À l'aide d'un analyseur SAX implique que vous avez besoin pour gérer ces événements et de donner un sens aux données retournées à chaque événement.

Dans les DOM, il n'y a pas d'événements déclenchés lors de l'analyse. L'ensemble de XML est analysé et une arborescence DOM (des nœuds dans le XML) est généré et s'en retourna. Une fois analysée, l'utilisateur peut naviguer dans l'arborescence pour accéder aux données déjà intégrées dans les divers nœuds dans le XML.

En général, dans les DOM est plus facile à utiliser mais a une surcharge de l'analyse de l'ensemble de XML avant de pouvoir commencer à l'utiliser.

105voto

Bohemian Points 134107

En quelques mots...

SAX : Est un processeur de type stream. Vous avez seulement une infime partie en mémoire à tout moment et vous « sniff » le flux de données XML lors de son passage. Il n’utilise presque aucun mémoire, mais vous ne pouvez faire des trucs de « DOM », comme utiliser xpath ou parcourir des arborescences.

DOM : Vous chargez tout cela dans la mémoire - c’est un gros mangeur de mémoire massive. Vous pouvez souffler la mémoire avec les documents de tailles moyennes même. Mais vous pouvez utiliser xpath et parcourir l’arborescence, etc..

75voto

Chinmoy Mishra Points 111

Ici, en plus des mots simples:

DOM -Modèle d'arbre de parser(Objet) (Arbre de nœuds).

-DOM charge le fichier dans la mémoire et ensuite d'analyser le fichier.

-A la mémoire de contraintes, car il charge le fichier XML avant l'analyse.

-DOM est de lire et d'écrire (peut insérer ou supprimer le nœud).

-Si le contenu du fichier XML est petit alors préférez DOM parser.

-En arrière et en avant de la recherche est possible pour la recherche de balises et d'évaluation de la informations à l'intérieur des balises. Donc, ce qui donne la facilité de navigation.

-Plus lent à l'exécution.

SAX

-Cas d'analyseur (Séquence d'événements).

-SAX traite le fichier à il lit c'est à dire Analyse de nœud en nœud.

-Pas de contraintes de mémoire car il ne stocke pas le contenu du fichier XML dans la mémoire.

-SAX est en lecture seule c'est à dire ne pouvez pas insérer ou supprimer le nœud.

-Utiliser l'analyseur SAX lorsque le contenu de la mémoire est grande.

-SAX lit le fichier XML à partir du haut vers le bas et vers l'arrière de navigation n'est pas possible.

-Plus rapide au moment de l'exécution.

38voto

Daniel Schneller Points 6417

Vous avez raison dans votre compréhension de la DOM. Le fichier XML sera chargé comme un tout et tout son contenu sera construite comme une représentation en mémoire de l'arbre du document représente. Cela peut prendre du temps et de la mémoire du temps, en fonction de la taille du fichier d'entrée est. L'avantage de cette approche est que vous pouvez facilement requête de toute partie du document, et de manipuler librement tous les nœuds de l'arbre.

Le DOM approche est généralement utilisée pour de petites structures XML (où les petites dépend de la puissance et de la mémoire de votre plate-forme a), qui peuvent avoir besoin d'être modifié et interrogés de différentes façons, une fois qu'ils ont été chargés.

SAX sur l'autre main est conçu pour traiter le XML d'entrée de pratiquement n'importe quelle taille. Au lieu de le framework XML de faire le travail dur pour vous dans la compréhension de la structure du document et la préparation potentiellement un grand nombre d'objets pour tous les nœuds, les attributs, etc., SAX complètement les feuilles que pour vous.

Ce qu'il fait est de lire les commentaires de la haut et invoquer des méthodes de rappel que vous fournissez lors de certains "événements" de se produire. Un événement pourrait être frappé dans une balise d'ouverture, un attribut dans la balise, recherche de texte à l'intérieur d'un élément ou à venir à travers une balise de fin.

SAX obstinément lit l'entrée et vous dit ce qu'il voit dans ce mode. C'est à vous de conserver tous les renseignements dont vous avez besoin. Cela signifie généralement que vous construisez une sorte de machine d'état.

Bien que cette approche de traitement XML est beaucoup plus fastidieux, il peut être très puissant, trop. Imaginez que vous voulez il suffit d'extraire les titres des articles de presse à partir d'un blog d'alimentation. Si vous lisez ce document XML à l'aide de DOM il serait de charger tout le contenu de l'article, toutes les images etc. qui sont contenues dans le fichier XML en mémoire, même si vous n'êtes pas intéressé par elle.

Avec le SAX, vous pouvez simplement vérifier si le nom de l'élément est e. g.) "titre" à chaque fois que votre "startTag de l'événement" la méthode est appelée. Si oui, vous savez que vous avez besoin d'ajouter que la prochaine "elementText" événement offre à vous. Lorsque vous recevez le "endTag" cas d'appel, vous vérifiez de nouveau si ce n'est l'élément de fermeture de la "titre". Après cela, il suffit d'ignorer tous les autres éléments, jusqu'à ce que l'entrée se termine, ou d'une autre "startTag" avec un nom de "titre". Et ainsi de suite...

Vous avez pu lire au travers de mégaoctets et mégaoctets de XML de cette manière, l'extraction de la petite quantité de données dont vous avez besoin.

Le côté négatif de cette approche est, bien sûr, que vous avez besoin de faire beaucoup plus de livre-rester soi-même, selon ce que les données dont vous avez besoin pour l'extraction et le degré de complexité de la structure XML. En outre, vous ne peut naturellement pas modifier la structure de l'arborescence XML, car vous ne l'avez dans la main comme un tout.

Donc, en général, SAX est adapté pour le peignage à travers potentiellement de grandes quantités de données que vous recevez avec une "requête" à l'esprit, mais n'a pas besoin de modifier, tandis que DOM est plus destiné à vous donner une totale flexibilité dans l'évolution de la structure et du contenu, au détriment de la hausse de la demande de ressources.

17voto

Kerrek SB Points 194696

Vous êtes à comparer des pommes et des poires. SAX est un analyseur qui analyse sérialisé DOM structures. Il ya beaucoup de différents analyseurs, et "événementiel" se réfère à l'analyse de la méthode.

Peut-être un petit récapitulatif est dans l'ordre:

  • Le modèle d'objet de document (DOM) est un résumé du modèle de données qui décrit une structure hiérarchique, basés sur l'arborescence de la structure du document; un arbre de document se compose de nœuds, à savoir d'éléments, d'attributs et les nœuds de texte (et quelques autres). Les nœuds ont les parents et les enfants et peut être parcouru, etc., tous les trucs que vous avez l'habitude de le faire en JavaScript (qui, incidemment, n'a rien à voir avec les DOM).

  • Un DOM structure peut être sérialisé, c'est à dire écrit dans un fichier, à l'aide d'un langage de balisage comme HTML ou XML. Un fichier HTML ou XML contient donc un "écrit" ou "aplati" version d'un document abstrait arbre.

  • Pour un ordinateur à manipuler, ou même afficher une arborescence DOM à partir d'un fichier, il a pour désérialiser, ou analyserle fichier et de le reconstruire à l'abstrait, arbre en mémoire. C'est là que l'analyse est en.

Nous arrivons maintenant à la nature des analyseurs. Une façon d'analyser serait à lire dans l'ensemble du document et de manière récursive construire une arborescence dans la mémoire, et enfin d'exposer l'ensemble du résultat à l'utilisateur. (Je suppose que vous pourriez appeler ces analyseurs "DOM analyseurs".) Ce serait très pratique pour l'utilisateur (je pense que c'est ce que PHP XML parser), mais il souffre de problèmes d'évolutivité et devient très cher pour des documents volumineux.

D'autre part, basés sur des événements, l'analyse, comme le fait par SAX, regarde le fichier de façon linéaire et simplement fait des rappels à l'utilisateur chaque fois qu'il rencontre une pièce de structure de données, comme des "cet élément a commencé", que "l'élément fini", "texte ici", etc. Ceci a l'avantage qu'il peut aller à l'infini sans se préoccuper de la taille du fichier d'entrée, mais il est beaucoup plus faible niveau, car il oblige l'utilisateur à faire tous les travaux de traitement (en fournissant des rappels). Pour revenir à votre question initiale, le terme "événement à base de" se réfère à ceux de l'analyse des événements que l'analyseur soulève qu'il parcourt le fichier XML.

L' article de Wikipedia a beaucoup de détails sur les étapes de SAX de l'analyse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X