OVH Cloud OVH Cloud

Question newbie : Quelle différence entre SAX et DOM

2 réponses
Avatar
Bernard Koninckx
Bonjour à tous,

Je souhaite savoir quelles sont les différences significatives entre les
librairies SAX et DOM. Quels sont leurs domaines d'applications respectifs ?
Dans quel cas utiliser l'une plus tôt que l'autre ?

Merci à tous

Bernard

2 réponses

Avatar
jerome moliere
Bernard Koninckx wrote:
Bonjour à tous,

Je souhaite savoir quelles sont les différences significatives entre les
librairies SAX et DOM. Quels sont leurs domaines d'applications respectifs ?
Dans quel cas utiliser l'une plus tôt que l'autre ?
DOM propose un representation (intuitive) d'un document XML sous forme

d'un arbre...il a donc besoin de monter en memoire tout un document même
si tu n'a sbesoin que du titre
SAX utilises un systeme de callbakcs pour informer le codeur de certains
evenements (nouvel element, fin d'element etc..)
la premiere est simple et facile a coder
la seconde est chiante mais puissante
tu ne peux traiter de gros documents avec DOM avec SAX aucunb souci (au
dessus de qq Mo il faut jeter DOM)

Jerome

--
Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003
http://www.eyrolles.com/php.informatique/Ouvrages/ouvrage.php3?ouv_ean13—82212111941

Avatar
Vincent BERSIN
[Attention : ceci est ce que j'ai compris de SAX et DOM, je n'y ai pas passé
non plus 1000 heures ... ;o)]

DOM propose un representation (intuitive) d'un document XML sous forme
d'un arbre...il a donc besoin de monter en memoire tout un document même
si tu n'a sbesoin que du titre
SAX utilises un systeme de callbakcs pour informer le codeur de certains
evenements (nouvel element, fin d'element etc..)


vrai !
DOM construit un arbre qui est manipulable, ie on peut modifier des noeuds,
des champs etc .. on peut facilement récupérer des valeurs
SAX est complètement séquentiel : il n' a pas de notion d'architecture, et
est donc extrèmement rapide ; mais il ne garde rien en mémoire

par ex si tu as
<a>
<b>heho</b>
<c>tu</c>
</a>

SAX va te mettre qqch du genre :
noeud trouvé : <a>
noeud trouvé : <b>
valeur trouvée : heho
noeud trouvé : </b>
noeud trouvé : <c>
valeur trouvée : tu
noeud trouvé : </c>
noeud trouvé : </a>

par contre, il sera incapable de te dire que "heho" est la valeur comprise
entre <b> et </b>
ce sera à toi de la faire, notamment en utilisant des booléens

à l'inverse, DOM dira :
<a>
|___ <b> : valeur : heho : </b>
|___ <c> : valeur : tu : </c>
</a>

c'est très schématique, et c'est aussi ce que j'en ai compris ! :o) <--
prémunissons nous des critiques ;o)

je te mettrais des liens qd je reviendrais chez moi, je les ai pas au boulot
....... désolé

la premiere est simple et facile a coder
la seconde est chiante mais puissante


en effet, DOM est plus simple que SAX car SAX t'oblige à reconnaitre toi
même que tu es "entré" ds une balise

tu ne peux traiter de gros documents avec DOM avec SAX aucun souci (au
dessus de qq Mo il faut jeter DOM)


DOM charge tout en RAM ...., SAX rien du tout

PS : [légèrement HS] en utilisant xercès pour valider des docs, si xercès ne
trouve pas ta DTD ou ton schéma, il considère ton xml comme valide ... OUPS
!