Java Avance
XML par JDOM
Emmanuel ADAM
LAMIH UMR CNRS 8530
Universit´e de Valenciennes et du Hainaut-Cambr´esis
FRANCE
25 mars 2008
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 1 / 18
Plan
1SAX et JDOM
2Cr´eation de fichier
3Sortie XML
4Parser en XML
5Parcourir un document XML
6Filtrage d’un document XML
7Modification d’un document XML
8Transformation d’un document XML
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 2 / 18
SAX et JDOM
JDOM et XML
inspir´e de Nicolas CYNOBER 2005
SAX
SAX est l’acronyme de Simple API for XML.
Parseur utilisant des ´ev´enements pour piloter le traitement d’un fichier XML
Un objet (handler) doit fournir les traitements `a r´ealiser sur les fichiers XML
Le parseur appelle ces m´ethodes
JDOM utilise des collections SAX pour parser les fichiers XML.
DOM
DOM est l’acronyme de Document Object Model.
C’est une sp´ecification du W3C pour proposer une API qui permet de
mod´eliser, de parcourir et de manipuler un document XML
ole de DOM : fournir une repr´esentation d’un document XML sous la forme
d’un arbre d’objets et permettre le parcours et la mise `a jour).
DOM est ind´ependant du langage d’impl´ementation.
Parseur DOM pour JAVA le plus r´epandu : Xerces
JDOM utilise DOM
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 3 / 18
Cr´eation de fichier
Cr´eation d’un fichier XML
inspir´e de Nicolas CYNOBER 2005
Cr´eation
Les noeuds d’un arbre XML sont appel´es Element
Chaque Element peut poss´eder des propri´et´es (Attribute)
Chaque Element peut poss´eder des fils de type Elements
Exemple
<?xml v e r s i o n=” 1 . 0 ” e n coding=UTF8?>
<menu>
<F r i t e s c l a s s e= g r a s s e s >
<accompagnement>F r i c a d e l l e s</ accompagnement>
</ F r i t e s>
</menu>
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 4 / 18
Cr´eation de fichier
Cr´eation d’un document XML par JDOM
inspir´e de Nicolas CYNOBER 2005
i m p o r t or g . jdom . ;
. . .
or g . jdom . Document document ;
. . .
v o i d creerXML ( ) {
// R a c i n e = menu
El e ment r a c i n e = new Ele m ent (menu) ;
// C r e a t i o n d un n ouv eau Document JDOM b as´e s u r l a r a c i n e
document = new Document ( r a c i n e ) ;
// A j ou t d ’ un so u s noeud
El e ment p l a t = new Elemen t ( F r i t e s ) ;
r a c i n e . a d d C o n te n t ( p l a t ) ;
// a j o u t d une p r o p r i e t e
A t t r i b u t e c l a s s e = new A t t r i b u t e ( c l a s s e , g r a s s e s ) ;
p l a t . s e t A t t r i b u t e ( c l a s s e ) ;
// A j o u t d un s o u s noeud a p l a t
El e ment accompagnement = new Ele m e nt (” accompagnemen t ” ) ;
accompagnement . s e t T e x t ( F r i c a d e l l e s ) ;
p l a t . a d d C o n t e n t ( nom ) ;
}
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 5 / 18
Sortie XML
Enregistrement / Affichage d’un fichier XML
inspir´e de Nicolas CYNOBER 2005
Sortie
La classe XMLOutputter propose des m´ethodes de sortie d’un
document XML
Sous diff´erents formats :
RawFormat : sans modification d’espaces
PrettyFormat : avec mise en page
CompactFormat : sans la normalisation des espaces
Possibilit´e de ”sortir” : des documents, ´el´ements, commentaires...
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 6 / 18
Sortie XML
Affichage et enregistrement d’un document XML par
JDOM
inspir´e de Nicolas CYNOBER 2005
v o i d a f f i c h e ( )
{
t r y {
// a f f i c h a g e c l a s s i q u e p a r g e t P r e t t y F o r m a t ( )
XMLOutputter s o r t i e = new XMLOutputter (Format .g e t P r e t t y F o r m a t ( ) ) ;
s o r t i e . o u t p u t ( document , System . o u t ) ; }
c a t c h ( j a v a . i o . I O E x c e p t i o n e ) {}
}
v o i d e n r e g i s t r e ( S t r i n g f i c h i e r )
{
t r y {
// s o r t i e c l a s s i q u e p a r g e t P r e t t y F o r m a t ( )
XMLOutputter s o r t i e = new XMLOutputter (Format .g e t P r e t t y F o r m a t ( ) ) ;
// E n r e g i s t r e m e n t dans f i c h i e r de nom f i c h i e r
s o r t i e . o u t p u t ( document , new F i l e O u t p u t S t r e a m ( f i c h i e r ) ) ; }
c a t c h ( j a v a . i o . I O E x c e p t i o n e ) {}
}
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 7 / 18
Parser en XML
Ouvrir un document XML
inspir´e de Nicolas CYNOBER 2005
Parser un doc XML
Parser un fichier XML = transformer vers une arborescence JDOM.
Utilisation du constructeur SAXBuilder, bas´e sur l’API SAX.
v o i d deXMLaJDOM( )
{
//On c r ´e e une i n s t a n c e de SAXBuilder
SAXBuilder sx b = new SAXBuilder ( ) ;
t r y {
// c r e a t i o n d ’ un document JDOM a p a r t i r du f i c h i e r de nom
f i c h i e r
document = s x b . b u i l d (new F i l e ( f i c h i e r ) ) ; }
c a t c h ( E x c e p t i o n e ) {System . e r r . p r i n t l n ( pb de p a r s i n g : + e ) ; }
}
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 8 / 18
Parser en XML
Parcourir un document XML
inspir´e de Nicolas CYNOBER 2005
Exemple 2
<?xml v e r s i o n= 1 . 0 e n c o d i n g=”UTF8” ?>
<menu>
<F r i t e s c l a s s e=” g r a s s e s >
<accompagnement>F r i c a d e l l e s</ accompagnement>
<s a u c e>B i e r r e</ s a u c e>
</ F r i t e s>
<F r i t e s c l a s s e=” g r a s s e s >
<accompagnement>Carbonade</ accompagnement>
<s a u c e>B i e r r e</ s a u c e>
</ F r i t e s>
<F r i t e s c l a s s e=” s a l e e >
<accompagnement>Moule</ accompagnement>
<s a u c e>M a r o i l e</ s a u c e>
</ F r i t e s>
</menu>
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 9 / 18
Parcourir un document XML
Parcourir un document XML
inspir´e de Nicolas CYNOBER 2005
Balayer l’arbre
Possibilit´e de r´ecup´erer les fils d’un noeud
Possibilit´e d’acc´eder aux attributs d’un noeud
v o i d a f f i c h e M e n u ( )
{
r a c i n e = document . g e tR o o tE l eme n t ( ) ;
// r e c u p e r a t i o n d e s p l a t s a bas e de F r i t e s a p a r t i r de l a r a c i n e
L i s t <Element>l i s t e P l a t s = ( L i s t <Element >) r a c i n e . g e t C h i l d r e n (
F r i t e s ) ;
// b a l a y a g e p a r I t e r a t o r
I t e r a t o r <Element>i = l i s t e P l a t s . i t e r a t o r ( ) ;
w h i l e ( i . h asN ext ( ) )
{
El e ment c o u r a n t = i . n e xt ( ) ;
//On a f f i c h e l a cc om pag nement de l e l e m e n t c o u r a n t
Sys te m . o ut . p r i n t l n ( c o u r a n t . g e t C h i l d (” acc ompagnement ” ) . g e t T e x t ( )
) ;
}
}
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 10 / 18
Filtrage d’un document XML
filtrage d’un fichier XML
inspir´e de Nicolas CYNOBER 2005
Filtrage
Utilisation d’un objet de type Filter
Possibilit´e d’utiliser une sous classes :
ElementFilter bas´ee sur le filtre d’´el´ements
ContentFilter bas´ee sur le de type de contenu
(commentaires, ´el´ements, ...)
AbstractFilter pour coupler les filtres (par ET, OU,
negation)
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 11 / 18
Filtrage d’un document XML
Exemple de filtre I
inspir´e de Nicolas CYNOBER 2005
filtre sur les plats avec sauce `a la Bi`ere
v o i d a f f i c h e F i l t r e ( )
{
//On c r ´e e un n ouvea u f i l t r e
F i l t e r f i l t r e = new F i l t e r ( )
{
p u b l i c b o o le a n ma tche s ( O b j e c t ob )
{
//1: on ne f i l t r e que l e s El em e nt s
i f ( ! ( ob i n s t a n c e o f Eleme n t ) ) {r e t u r n f a l s e ;}
El e ment e l e m e n t = ( Element ) ob ;
b o o l e a n v e r i f S a u c e = f a l s e ;
//2 on f i l t r e s u r l a v a l e u r B i e r e de chaqu e noeud s a u c e
i f ( e l e m e n t . g e t C h i l d ( s a u c e ) . ge tT ex tTri m ( ) . e q u a l s ( B i e r e )
) v e r i f S a u c e = t r u e ;
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 12 / 18
Filtrage d’un document XML
Exemple de filtre II
inspir´e de Nicolas CYNOBER 2005
// S i n os c o n d i t i o n s s on t r e m p l i e s on r e t o u r n e t r ue , f a l s e
s i n o n
r e t u r n v e r i f S a u c e ;
}
};// F i n du f i l t r e
// g e t C o n t e n t u t i l i s e l e f i l t r e
L i s t r e s u l t a t = r a c i n e . g e t C o n t e n t ( f i l t r e ) ;
// A f f i c h a g e de l a t t r i b u t c l a s s e
I t e r a t o r i = r e s u l t a t . i t e r a t o r ( ) ;
w h i l e ( i . h asN ext ( ) )
{
El e ment c o u r a n t = ( Ele m ent ) i . n e x t ( ) ;
Sys te m . o ut . p r i n t l n ( c o u r a n t . g e t A t t r i b u t e V a l u e ( c l a s s e ) ) ;
}
}
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 13 / 18
Modification d’un document XML
Modification d’un document XML
inspir´e de Nicolas CYNOBER 2005
Modifications
Possibilit´e d’utiliser les fonctions suivantes sur les arbres :
addContent,
cloneContent,
removeAttribute, removeChild, removeChildren, removeContent,
removeContent,
setAttribute, setContent, setName, setText,
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 14 / 18
Modification d’un document XML
Exemple de modification
inspir´e de Nicolas CYNOBER 2005
supression des sauces
v o i d s u p p r E l e m e n t ( S t r i n g e l e m e n tA S u p p r im e r )
{
r a c i n e = document . g e t Ro o tE l e me n t ( ) ;
// r e c u p e r a t i o n d e s p l a t s
L i s t l i s t P l a t s = r a c i n e . g e t C h i l d r e n ( F r i t e s ) ;
I t e r a t o r i = l i s t P l a t s . i t e r a t o r ( ) ;
w h i l e ( i . h asN ext ( ) )
{
El e ment c o u r a n t = ( Ele m ent ) i . n e x t ( ) ;
// S i on t r o u v e l e l e m e n t a s u p p r i m e r
i f ( c o u r a n t . g e t C h i l d ( e le me nt AS up pri me r ) != n u l l )
{
c o u r a n t . r e m o v e C h i l d ( e l e me n t AS u p p r im e r ) ;
//On renomme l E le men t p e r e
c o u r a n t . setName ( p l a t m o d i f i e ) ;
}
}
}
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 15 / 18
Transformation d’un document XML
Transformation d’un document XML
inspir´e de Nicolas CYNOBER 2005
Transformation
Des r`egles d´efinies en XSLT permettent de transformer un document
XML
Int´erˆet :
dialoguer entre applications
transmettre les donn´ees sous un autre format
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 16 / 18
Transformation d’un document XML
Exemple de modification I
inspir´e de Nicolas CYNOBER 2005
transformation de document
v o i d transformXML ( o rg . jdom . Document documentJDOMEntree , S t r i n g
f i c h i e r X S L )
{
//Document JDOMResult , r ´e s u l t a t de l a t r a n s f o r m a t i o n TraX
JDOMResult documentJDOMSortie = new JDOMResult ( ) ;
//Document JDOM a p r`e s t r a n s f o r m a t i o n
or g . jdom . Document r e s u l t a t = n u l l ;
t r y {
T r a n s f o r m e r F a c t o r y f a c t o r y = T r a n s f o r m e r F a c t o r y .n e w I n s t a n c e ( ) ;
T r a n s f o r m e r t r a n s f o r m e r = f a c t o r y . ne w Tran s f o rmer (new
Str e a mS o u rc e ( f i c h i e r X S L ) ) ;
t r a n s f o r m e r . t r a n s f o r m (new or g . jdom . t r a n s f o r m .JDOMSource (
documentJDOMEntree ) , documentJDOMSortie ) ;
r e s u l t a t = documentJDOMSortie . getDocument ( ) ;
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 17 / 18
Transformation d’un document XML
Exemple de modification II
inspir´e de Nicolas CYNOBER 2005
XMLOutputter o u t p u t t e r = new XMLOutputter (Format .
g e t P r e t t y F o r m a t ( ) ) ;
o u t p u t t e r . o u t p u t ( r e s u l t a t , new F i l e O u t p u t S t r e a m ( r e s u l t a t . xml ” )
) ;
}
c a t c h ( E x c e p t i o n e ) {...}
}
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 18 / 18
1 / 5 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !