Académique Documents
Professionnel Documents
Culture Documents
Sommaire
Les deux principales interfaces de
programmation XML :
DOM (Document Object Model), bas sur
une reprsentation hirarchique
SaX (Simple API for XML), bas sur des
dclencheurs (vnements/action)
DOM et SaX
Toutes les applications XML passent par une
phase pralable danalyse
Processeur XSLT
Parseur
DOM
Document
XML
Parseur
SaX
Editeur XML
...
flux
de donnes
Base de donnes
Dclenchement
doprations
LAPI SAX
Architecture SAX
Associer des vnements aux balises :
Document
XML
Parseur SAX
Evnements
<ELT1> </ELT1> <ELT2>
...
Accumulateur
Donnes
Fonctions
Les vnements
Dbut de document : connexion la base
Balise <FILM> : cration dun
enregistrement Film
Balise <TITRE> : on affecte Film.titre
Balise <ANNEE> : on affecte Film.annee
etc..
Balise </FILM> : insertion de
lenregistrement dans la base
Element
FILM
Attr
TITRE
Vertigo
Attr
ANNEE
1958
Element
RESUME
Texte
Scottie ...
Element
GENRE
Comment
genre du film
Texte
Drame
Attribute
TreeNode
Container
Leaf
Notation
Character
Data
Comment
Processing
Instruction
Entity
Document
Entity
Reference
Element
Document
Type
Text
CData
Section
La super-classe Node
Une approche faiblement objet
Tout nud DOM est un Node
En principe les proprits spcifiques un
sous-type devraient apparatre au niveau de
ce sous-type
Exemple : le nom, valable pour un nud
Element, pas pour un nud Text
En pratique Node rassemble toutes les
proprits de tous les types de nuds
Type
Proprit
Type
nodeType
short
nodeName
String
nodeValue
String
parentNode
Node
firstChild
Node
lastChild
Node
childNodes
NodeList
previousSibling
Node
nextSibling
Node
attributes
NamedNodeMap
nodeName
nodeValue
CDATASection
#cdata-section
Comment
#comment
contenu du commentaire
Document
#document
NULL
DocumentType
nom de la DTD
NULL
Element
nom de llment
NULL
ProcessingInstruction
nom de la cible
Text
#text
Entity
nom de lentit
NULL
EntityReference
NULL
Attr
nom de lattribut
valeur de lattribut
Table 1:
La classe Document
Reprsente la racine du document. Cest
toujours le premier nud cr.
Il contient ventuellement une rfrence vers
la DTD
Il sert dusine crer de nouveaux
nuds avec les mthodes
createElement(), createTextNode(),
createComment(), etc
Structure du programme
Phase danalyse
// Rcupration du document
File fdom = new File (args[0]);
// Instanciation du parseur
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder =
factory.newDocumentBuilder();
// Analyse du document
Document dom = builder.parse(fdom);
// Dbut du parcours avec le numro 1
Node elementRacine =
dom.getDocumentElement();
Parcours (elementRacine, 1);
Parcours : numrotation
private static int Parcours (Node noeud,
int numero)
{
String str = new String();
numero++;
// Numrotation du noeud sil est de
// type texte
if (noeud.getNodeType() == Node.TEXT_NODE)
{
str = "(" + numero + ") "
+ noeud.getNodeValue();
noeud.setNodeValue (str);
}
...
Parcours : rcursion
...
// Parcours rcursif si le noeud a des fils
if (noeud.hasChildNodes())
{
// Rcupre la liste des fils du
// noeud courant (liste de type NodeList)
NodeList fils = noeud.getChildNodes();
// Parcours de la liste et appel rcursif
for (int i=0; i < fils.getLength(); i++)
numero = Parcours (fils.item(i), numero);
}
return numero;
}
Srialisation
la fin du traitement DOM, le document modifi
est srialis (par exemple pour tre stock)
// Instanciation du serialiseur Xalan
XMLSerializer ser = new XMLSerializer ();
// Dfinition du fichier de sortie
ser.setOutputByteStream(System.out);
// Srialisation du document DOM
ser.serialize(dom);
Element
A
Comment
commentaire
Element
B
Element
C
Texte
Texte
Element
D
Texte
Condition: 1 < 2
Seconde version
Tout est inclus dans le mme fichier, avec une
section CDATA
<?xml version=1.0?>
<A>
<!-- commentaire -->
<B>Texte</B>
<C>
<D>Condition: <![CDATA[1 < 2]]></D>
</C>
</A>
Troisime version
Une partie du document est insr par rfrence
une entit externe.
<?xml version=1.0?>
<!DOCTYPE A [
<!ENTITY file
SYSTEM "ExXMLArbreB.xml">
]>
<A>
<!-- commentaire -->
<B>Texte</B>
&file;
</A>
Serialiseur : construction
public class Serialiseur
{
Document doc;
Node elementRacine;
// Constructeur de la classe
public Serialiseur (Document argdoc)
{
doc = argdoc;
// On prend la racine du document
elementRacine = doc.getDocumentElement();
}
Serialiseur : sortie
Serialiseur : parcours