0% ont trouvé ce document utile (0 vote)
4 vues40 pages

Guide de manipulation XML avec SAX et DOM

Le document traite de la manipulation de XML à travers différentes API, notamment SAX et DOM. SAX est une API événementielle qui permet de traiter un document XML de manière séquentielle et efficace, tandis que DOM représente le document sous forme d'un arbre d'objets, offrant une interface riche mais gourmande en mémoire. Le document présente également des exemples d'utilisation en Java et PHP, ainsi que des comparaisons entre les deux approches.

Transféré par

modoufalle9
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
4 vues40 pages

Guide de manipulation XML avec SAX et DOM

Le document traite de la manipulation de XML à travers différentes API, notamment SAX et DOM. SAX est une API événementielle qui permet de traiter un document XML de manière séquentielle et efficace, tandis que DOM représente le document sous forme d'un arbre d'objets, offrant une interface riche mais gourmande en mémoire. Le document présente également des exemples d'utilisation en Java et PHP, ainsi que des comparaisons entre les deux approches.

Transféré par

modoufalle9
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

XML­API

1
Manipuler XML
Comment manipuler un document XML dans un
programme?
• Très bas niveau : analyse syntaxique
• Bas niveau : validation
• Niveau intermédiaire:
• Manipulation du document chargé en mémoire
• Sauvegarde d’un document
• Haut niveau:
• Sérialisation
• Transformation
•… 2
Manipuler XML

3
SAX

4
SAX

• Simple API for XML : une API simple pour


réagir sur le contenu et la structure d’un
document

• Le document est vu comme une suite


d’événements qui surviennent lors de la lecture
séquentielle du document
5
SAX

• Développement communautaire
– xml­dev mailing list
• Modèle événementiel: événements d’analyse
syntaxique
• Bas niveau
• Efficace
• Délicat à mettre en oeuvre

6
SAX

• Langage de référence : Java notamment dans


JAXP (packages [Link], [Link], [Link],
[Link], inclus dans JDK depuis la version 1.4)

• De Nombreuses autres implémentations


– Xerces : Java, C++, COM, Perl
– Microsoft : Binding COM, et donc C,C++,VB
– Support en Python, Perl, PHP, etc
• Proposé par le groupe [Link] ([Link]
7
Fonctionnement de SAX
• Un modèle événementiel

• Principe
– Un document est transformé en un flux d’événements
syntaxiques (balise ouvrante, fermante …)
– A chaque événement, un callback est appelé dans l’ordre
d’apparition dans le document
– Aucune mémoire
– Une application est un écouteur d’événements
– Parcours préfixé en profondeur de l’arbre
– Lecture seule
8
Fonctionnement de SAX

9
Principe de SAX
• StartDocument
• startElement: cours
• startElement: titre
• characters: « XML API »
• endElement: titre
• startElement: auteur
• startElement: nom
• characters: « SECK »
• endElement: nom
• startElement: prénom
• characters: « alioune »
• endElement: prénom
• startElement: description
• charactere: « ce cours aborde
les » 10
Principe de SAX
• starElement: b
• Characters: « conceptes »
• endElement: b
• characters: « autour de XML »
• endElement: description
• endElement: cours
• endDocument

11
Mécanismes
Tout est basé sur quatre interfaces:
• ContentHandler
– La plus importante
– Réagit aux événements: une méthode par
type d’événement (startElement,…)
• ErrorHandler: gestion des erreur en
particulier les problèmes de validation

12
Mécanisme

• DtdHandler: gestion d’une petite partie


des DTD
• EntityResolver: gestion du remplacement
des entites externes
Les quatre interfaces sont implémentées par
DefaultHandler qui ne fait pas grand chose

13
Fonctionnement d’un analyseur

1. Ouverture du fichier à analyser


2. Lecture d’une partie significative du fichier:
3. Si cette partie
a. Pose un probleme (document mal formé ou non valide), appel
d’une methode du ErrorHandler
b. Est une référence à une entité, appel d’une méthode EntityResolver
c. Est un composant de la DTD, appel d’une méthode de la
DTDHandler
d. Est une balise; du texte, etc., appel d’une méthode du
ContentHandler
4. Si le document n’est pas terminé, retour en 2
14
Les méthodes essentielles
XMLReader ContentHandler
•setContentHandler •startDocument
•setErrorHandler •endElement
•parse •characters
•ndDocument
ErrorHandler
•startElement
•fatalError
•error
•warning

15
Un exemple en Java

16
PHP: SAX
• PHP
– Version 4: basé sur expat
– version 5: basé sur libxml
– Transparent pour l’utilisateur
• Quelques fonctions
– xml_parser_create
– xml_set_element_handler
– xml_set_character_data_handler

17
Exemple pratique

• Installer Xamp
• Lancer apache
• Créer une page php qui parse un document
xml

18
Emplacement dans l’arbre

• Une feuille peut être traduite par plusieurs


événements characters
• Toutes les méthodes n’ont aucun moyen
automatique de connaître leurs contextes
• Comment connaître le contexte d’un
événement?
• Réponse :pas de solution automatique =>
programmation au cas par cas
19
Contexte d’un événement

• Cas général
– On utilise une pile
– Chaque balise ouvrante empile un élément
– Chaque balise fermante dépile un élément
– À tout moment la pile contient la branche de
l’arbre contexte d’un événement
– La localisation reste limité
• Pas de prise en compte de l’ordre dans la fratrie
• Plus généralement du contexte d’un nœud excepté
les parents
20
DOM

21
DOM

• Document Object Model


• Standard W3C fait pour HTML & XML
• Structure d’objets pour représenter un document
– Résultat d’un parser
– Arbre d’objets reliés entre eux
• Interface d’objets pour naviguer entre eux
– Orienté Objet
– Peut etre utiliser en:
• Java (JAXP) , C++, Corba(IDL)
• C#,VB
• Python, PHP
22
Quelques parsers
Document
XML

Xerces Apache
(Java,C++) Parseur DOM

MSXML Microsoft
SDK Oracle Oracle
Arbre DOM
JAXP,J2EE Sun
API DOM

Application

23
Caractéristiques majeurs

• Modèle objet
• Haut niveau
• Très riche, de nombreux outils
• Coûteux: document entièrement en
mémoire
• Généralement construit au dessus de SAX

24
DOM : un modèle par arbre
Principe
• Un document est transformé en un objet
Document
• Un Document possède quelques fils:
• Un Element : la racine du document
• Divers élément top level: commentaire, processing
instruction et DTD
• La structure de l’arbre est obtenue grâce aux
• Elements:
• Un Element possede éventuellement des fils Element
• ou Text
• Un Element possède éventuellement des attributs
• DOM définit toutes les interfaces de
manipulations de l’arbre et de son contenu
25
Exemple d’arbre DOM

Racin du document

Element <Cours>
Document

NodeList

Element

Attr
<Titre> Id= " C1"
NamedNodeMap
NodeList

Text XML­API

26
Exemple d’arbre DOM

Document Racine du document

NodeList

Element <Cours>

<Cours>
NodeList
<Titre id="C1">
XML­API Element <Titre>
</Titre>
</Cours> NamedNodeMap

Attr Id= " C1"

NodeList

Text XML­API

27
Diagramme des interfaces (partiel)

28
Remarques

• Il y a d’autres classes (DocumentType,


EntityReference, etc.)
• L’héritage est « déroutant »
– Certaines méthodes de NODE n’ont pas
vraiment de sens à ce niveau
• getNodeName
• getNodeValue
– Le typage se fait par une constante de type
short: getNodeType()
29
Quelques interfaces de base
• Document • Nœud
– createElement (Nom_Element): – insertBefore (Nouveau_Noeud,
• créer un élément avec le nom Noeud_Reference):
spécifié en paramètre. • insère un nouveau nœud fils avant le
" nœud référence" déjà existant.
– createComment (commentaire):
– replaceChild (Nouveau_Noeud,
• créer une ligne de commentaires
Ancien_Noeud):
dans le document.
• remplace le nœud "Ancien_Noeud"
– createAttribute (Nom_Attribut): par le nœud "Nouveau_Noeud".
• créer un attribut avec le nom pris en – removeChild (Nœud):
paramètre. • supprime le nœud entré en paramètre
– getElementsByTagName de la liste des nœuds.
(nom_Tag): – appendChild (Nouveau_Noeud):
• retourne tous les descendants des • Ajoute un nouveau nœud a la fin de
éléments correspondants au la liste des nœuds.
Nom_Tag. – hasChildNodes():
• Retourne vrai si le nœud possède un
enfant

30
Autres Interfaces

• Interfaces fondamentales • Interfaces étendues


– DOMImplementation XML
– Document – ProcessingInstruction
– Comment – DocumentType
– DocumentFragment
– CDATASection
– Element
– Notation
– Attr(ibute)
– Entity
– NamedNodeMap

– EntityReference
CharacterData
• Comment
• Text
31
Quelques interfaces en JAVA

32
Quelques interfaces en JAVA

33
Quelques interfaces en JAVA

34
DOM: Exemple en java

• Faire un exemple d’utilisation de DOM


avec java

35
Bilan DOM

• Une interface objet standard


– Navigation dans l’arbre XML
– Traitement spécifiques
• Performance limité
– Place mémoire importante
– Traitement à la fin de l’analyse

36
DOM versus SAX

• DOM utilise SAX pour la


construction de l’arbre d’un
document XML
• SAX est plus léger que
DOM
• Au dessus de DOM il est
possible d’implémenter des
méthodes caller

37
API JAXP

38
API JAXP

39
API JAXP

40

Vous aimerez peut-être aussi