Vous êtes sur la page 1sur 39

Rapport de TP

Dveloppement d'applications en XML et


WebServices.

Ralis par : EL BEDRAOUI Ahmed.


Encadr par : YOUSSFI Mohamed.
2013-2014

Introduction
Dans le cadre du travail qui nous a t administr et consistant
au dveloppement d'un ensembles d'applications autour d'XML et
WebServices , le prsent document illustre les dmarches et le
code qui rsolvent l'ensemble des questions qui figurent dans
lnonc.

Sommaire

nonc
_______________________________________________________________ p4
Question 1
_______________________________________________________________ p6
Question 2
_______________________________________________________________ p7
Question 3
_______________________________________________________________ p7
Question 4
_______________________________________________________________ p7
Question 5
_______________________________________________________________ p9
Question 6
_______________________________________________________________ p10
Question 7
_______________________________________________________________ p13
Question 8
_______________________________________________________________ p17
Question 9
_______________________________________________________________ p18
Question 10
_______________________________________________________________ p20
Question 11
_______________________________________________________________ p22
Question 12
_______________________________________________________________ p25
Question 13
_______________________________________________________________ p27
Question 14
_______________________________________________________________ p28
Question 15
_______________________________________________________________ p31
Conclusion
_______________________________________________________________ p38

nonc
La fdration internationale de football, FIFA, met en place une base de donnes qui
contient les informations sur les quipes nationales de chaque pays et les rsultats des
diffrents matches jous
par ces quipes.
On suppose galement que deux scripts php ont t dploys dans le serveur
web :
- Le premier script nomm equipes.php, permet de se connecter la base de
donnes et retourner toutes les quipes au format XML suivant:
<?xml version="1.0" encoding="UTF-8"?>
<equipes>
<equipe numero="E1" nomEquipe="Maroc" score="540"/>
<equipe numero="E2" nomEquipe="Algrie" score="480"/>
<equipe numero="E3" nomEquipe="Tunisie" score="580"/>
</equipes>
-Le deuxime script nomm matches.php , permet dese connecter la base
de donnes et
retourner les matches jous par une quipe donne au format XML suivant :
<?xml version="1.0" encoding="UTF-8"?>
<equipe numEquipe="E1" nom="Maroc">
<matche date="2008-02-01" resultat="gagn" >
<adversaire>Algrie</adversaire>
<butsMarques>2</butsMarques>
<butsEncaisses>1</butsEncaisses>
</matche>
<matche date="2008-02-05" resultat="perdu" >
<adversaire>Tunisie</adversaire>
<butsMarques>0</butsMarques>
<butsEncaisses>1</butsEncaisses>
</matche>
</equipe>

Travail demand :
1- Faire une reprsentation graphique de larbre XML des deux fichiers
equipes.xml et matches.xml .
2- crire une DTD qui permet de dclarer la structuredu premier fichier XML
equipes.xml
3- crire un schma XML qui permet de dclarer la structure du deuxime
fichier
XML
matches.xml
4- Crer une base de donnes MYSQL nomme FIFA qui contient les tables qui
permettent de
stocker les quipes et
les matches jous parles quipes.
5- crire le code java dune application utilisant JDOM qui permet de se connecter
la base de
donnes et de gnrer le fichier XML qui contient toute les quipes.
6- Crer une application JDOM qui permet de saisir au clavier le numro dune quipe
et de
gnrer un fichier XML qui contient les matches
jous par cette quipe.
7- Reprendre les question 5 et 6 en utilisant JaxB au lieu de JDom.
8- crire une feuille de style XSL qui permet de transformer le fichier XML en une liste
droulante HTML qui contient toutes les quipes.
9- crire une feuille de style XSL qui permet de transformer le deuxime fichier XML
en un tableau HTML qui permet de lister les matches
jous. On affichera dans ce
tableau la date du matche, ladversaire, les buts marqus, les buts encaisss, le
nombre de points (3 pour un
matche gagn, 1 pour un matche nul et 0 pour un
matche perdu).
On affichera galement la fin du tableau :
Le nombre total de buts marqus
Le nombre total de buts encaisss
Le nombre de matches jous
Le nombre de matches gagns.
Le nombre de matches nuls
Le nombre de matches perdus
Le total des points.
10- crire une feuille de style XSL qui permet de transformer le fichier
XML
qui
contient les quipes en un document SVG qui affiche un graphique anim qui montre
le score de chaque quipe en les classant
par ordre dcroissant des scores.
11- Crer un web service qui permet de :
Consulter toutes les quipes
Consulter les matches jous par une quipe.
12- Tester le web service avec Oxygen
13- Crer un client java pour le web service.
14- Crer et tester les scripts PHP.
15- Crer une application avec AJAX qui permet dafficher les quipes
dans
une
liste droulante et en slectionnant une quipe, afficher les
matches jous par cette
5

quipe.

Question 1 :
-Reprsentation graphique de larbre XML des deux fichiers : equipes.xml
et
matches.xml .

Illustration 1: Reprsentation graphique de


l'arbre du fichier matches.xml

Illustration 2: Reprsentation graphique de l'arbre du fichier matches.xml


7

Question 2 :
-DTD qui permet de dclarer la structure du premier fichier XML equipes.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT equipes (equipe*)>
<!ELEMENT equipe EMPTY>
<!ATTLIST equipe numero CDATA #REQUIRED>
<!ATTLIST equipe nomEquipe CDATA #REQUIRED>
<!ATTLIST equipe score CDATA #REQUIRED>

Question 3 :
-Schma XML qui permet de dclarer la structure du deuxime fichier XML
matches.xml :
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="equipe">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="matche"/>
</xs:sequence>
<xs:attribute name="nom" use="required" type="xs:NCName"/>
<xs:attribute name="numEquipe" use="required" type="xs:NCName"/>
</xs:complexType>
</xs:element>
<xs:element name="matche">
<xs:complexType>
<xs:sequence>
<xs:element ref="adversaire"/>
<xs:element ref="butsMarques"/>
<xs:element ref="butsEncaisses"/>
</xs:sequence>
<xs:attribute name="date" use="required" type="xs:date"/>
<xs:attribute name="resultat" use="required" type="xs:NCName"/>
</xs:complexType>
</xs:element>
<xs:element name="adversaire" type="xs:string"/>
<xs:element name="butsMarques" type="xs:integer"/>
<xs:element name="butsEncaisses" type="xs:integer"/>
</xs:schema>

Question 4 :
-Base de donnes MYSQL nomme FIFA qui contient les tables qui
permettent de stocker les quipes et les matches jous parles quipes.
-En supposant qu'un matche ncessite absolument 2 quipes diffrentes, la table
matchs donc contiendra une cl primaire en plus de deux cls trangres provenant
de la table quipe.
8

Illustration 3: MLD de la base de donnes fifa

-La mise en place de cette base de donne ncessite l'installation d'un SGBD
Mysql. Du fait que le TP abordera aussi du PHP, l'ide serait d'installer l'application
WAMP regroupant le SGBD Mysql ainsi qu'un compilateur PHP.
-Le script ci-dessous permet la cration d'une base de donnes nomme fifa
sous Mysql.

Question 5 :
9

Code java utilisant JDOM qui permet de se connecter la base de


donnes et de gnrer le fichier XML qui contient toute les quipes :
code source :
public class XmlEquipe_question5 {
public static void main(String[] args) throws SQLException {
/* Cration d'un statement partir de la classe "ConnectionDatabase"
qui contient un objet Connetion*/
Statement st = (Statement) new
ConnectionDatabase.ConnectionFiFA().getConn().createStatement();
/* Rcupration des quipes depuis la base de donnes*/
ResultSet rs = st.executeQuery("select * from equipe");
/*Tableau d'objets "Equipe" */
ArrayList<Equipe> listeEquipe = new ArrayList<Equipe>();
String nomEquipe=null;
String numeroEquipe=null;
int score;
while(rs.next())
{
numeroEquipe = rs.getString(1);
nomEquipe = rs.getString(2);
score = Integer.parseInt(rs.getString(3));
listeEquipe.add(new Equipe(numeroEquipe, nomEquipe, score));
}
st.close();
/*Cration d'un objet "Document" qui sera mapp en xml grace JDOM*/
Document document = new Document();
/*Cration de la racine du fichier XML*/
Element racine = new Element("equipes");
document.setRootElement(racine);
/*Cration lement fils de la racine*/
Element equipe=new Element("equipe");
for(int i=0;i<listeEquipe.size();i++)
{
/*Cration des attribut de l'lement equipe*/
equipe.setAttribute("numero",listeEquipe.get(i).getNumero());
equipe.setAttribute("nomEquipe",listeEquipe.get(i).getNomEquipe());
equipe.setAttribute("score",String.valueOf(listeEquipe.get(i).getScore()));
/*Ajout de la racine au document*/
racine.addContent(equipe);
equipe=new Element("equipe");}
/*XMLoutputter permet d'envoyer l'objet "Document" de JDOM sous forme XML vers
la sortie standard ou vers un fichier*/
XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
try {
sortie.output(document, new FileOutputStream(new File("equipes.xml")));
} catch (IOException ex) { ex.printStackTrace();}
System.out.println("Fichier xml equipes.xml gnr");}
}

Rsultat de lexcution :
10

-Le rsultat de l'xection du programme est un fichier XML Contenant


le code suivant :
<?xml version="1.0" encoding="UTF-8"?>
<equipes>
<equipe numero="E1" nomEquipe="FC BARCELONE" score="30" />
<equipe numero="E2" nomEquipe="REAL MADRID" score="25" />
<equipe numero="E3" nomEquipe="RCA" score="40" />
<equipe numero="E4" nomEquipe="FUS" score="80" />
</equipes>

Question 6 :
-Application JDOM qui permet de saisir au clavier le numro dune
quipe et de gnrer un fichier XML qui contient les matches jous par cette
quipe.
Code source :
public class XmlMatcheParEquipe_question6 {
public static void main(String[] args) throws SQLException {
Statement st = (Statement) new
ConnectionDatabase.ConnectionFiFA().getConn().createStatement();
System.out.println("Numero d'quipe ?");
Scanner sc = new Scanner(System.in);
String numero =sc.next();
/*selon le MLD de la base de donne "fifa", l'quipe recherch peut se
trouver dans le champ equipea ou equipeb*/
ResultSet rs = st.executeQuery("select * from matchs where equipea='"+numero+"' or
equipeb='"+numero+"'");
/*Cration d'un talbeau contenant les matche jou par l'quipe demand*/
ArrayList<Matchs> listeMatch = new ArrayList<>();
while(rs.next())
{
listeMatch.add(new Matchs(rs.getString(2),rs.getString(3),
rs.getString(4),rs.getString(5),rs.getString(6),rs.getString(7)));
}
// tri du tableau des matches pour remettre l'equipe voulue dans le bon ordre
/*Le boucle suivante permet d'avoir l'adversaire toujours dans l'attribut eqb*/
for(int i=0;i<listeMatch.size();i++)
{
if(listeMatch.get(i).getEqb().equals(numero))
{
String a=listeMatch.get(i).getEqa();
String b=listeMatch.get(i).getEqb();
String c=listeMatch.get(i).getRes();
String d=listeMatch.get(i).getButm();
String e=listeMatch.get(i).getBute();
listeMatch.get(i).setEqa(b);
listeMatch.get(i).setEqb(a);
11

listeMatch.get(i).setButm(e);
listeMatch.get(i).setBute(d);
if(! c.equals("galit"))
{
if(c.equals("perdu"))
{
listeMatch.get(i).setRes("gagn");
}
else
listeMatch.get(i).setRes("perdu");}}}
// Reconstitution des noms des quipes partir de leur numero
rs = st.executeQuery("select nomEquipe from equipe where numero='"+numero+"'");
String nomEquipeA=null;
while(rs.next())
{
nomEquipeA=rs.getString(1);
}

for(int i=0;i<listeMatch.size();i++)
{
// Remplacement du numero de l'equipe voulue par son nom
listeMatch.get(i).setEqa(nomEquipeA);
// Remplacement des equipes adversaires par leur nom
rs = st.executeQuery("select nomEquipe from equipe where
numero='"+listeMatch.get(i).getEqb()+"'");
while(rs.next())
{
listeMatch.get(i).setEqb(rs.getString(1));
}
}
st.close();
// Cration du document XML
Document document = new Document();
Element racine = new Element("equipe");
document.setRootElement(racine);
racine.setAttribute("numEquipe",numero);
racine.setAttribute("nom",listeMatch.get(0).getEqa());
// Prparation des lement pour constituer le document XML
Element adv=new Element("adversaire");
Element butm=new Element("butsMarques");
Element bute=new Element("butsEncaisses");
Element matche= new Element("matche");
for(int i=0;i<listeMatch.size();i++)
{
racine.addContent(matche);
12

adv.setText(listeMatch.get(i).getEqb());
butm.setText(listeMatch.get(i).getButm());
bute.setText(listeMatch.get(i).getBute());
matche.setAttribute("date",listeMatch.get(i).getDate());
matche.setAttribute("resultat",listeMatch.get(i).getRes());
matche.addContent(adv);
matche.addContent(butm);
matche.addContent(bute);
adv=new Element("adversaire");
butm=new Element("butsMarques");
bute=new Element("butsEncaisses");
matche= new Element("matche");
}
XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
try {
sortie.output(document, new FileOutputStream(new
File("matchesParEquipe.xml")));
} catch (IOException ex) {ex.printStackTrace();}
System.out.println("Fichier xml equipes.xml gnr");
}}

Rsultat de lexcution :
Le rsultat de l'excution est un fichier XML contenant le code
suivant :
<?xml version="1.0" encoding="UTF-8"?>
<equipe numEquipe="E1" nom="FC BARCELONE">
<matche date="2014-01-18" resultat="perdu">
<adversaire>REAL MADRID</adversaire>
<butsMarques>2</butsMarques>
<butsEncaisses>6</butsEncaisses>
</matche>
<matche date="2014-01-13" resultat="gagn">
<adversaire>MAS</adversaire>
<butsMarques>2</butsMarques>
<butsEncaisses>1</butsEncaisses>
</matche>
</equipe>

13

Question 7 ( reprise question 5):


Code java utilisant JAXB qui permet de se connecter la base de donnes et
de gnrer le fichier XML qui contient toute les quipes :
Rponse :
JAXB est une spcification qui permet de faire correspondre un document
XML un ensemble de classes et vice versa via des oprations de
srialisation/dsrialisation nommes marshaling/unmarshaling.
Le code ci-dessous reprsente les classes annotes par des annotations JAXB :
@XmlRootElement
@XmlElement
@XmlAttribute

Illustration 4: Shma du Marshalling et Unmarshalling.

-Classe Equipes qui reprsente la racine du fichier XML que nous voulons gnrer.
Cette classe a un attribut ArrayList qui contient la liste des objet Equipe :

Code source :
@XmlRootElement(name="equipes")
public class Equipes {
private ArrayList<Equipe> equipe;
public Equipes(ArrayList<Equipe> equipe) {
this.equipe = equipe;
}
@XmlElement(name="equipe")
public ArrayList<Equipe> getEquipe() {
return equipe;
}
14

public void setEquipe(ArrayList<Equipe> equipe) {


this.equipe = equipe;
}
public Equipes() {
}}

-La Classe Equipe reprsente un lment fils de la racine


reprsent par l'objet Equipes cit plus haut :
Code source :
public class Equipe {
private String numero;
private String nomEquipe;
private int score;
public Equipe(String numero, String nomEquipe, int score) {
this.numero = numero;
this.nomEquipe = nomEquipe;
this.score = score;
}
@XmlAttribute(name="numero",required = true)
public String getNumero() {
return numero;
}
public void setNumero(String numero) {
this.numero = numero;
}
@XmlAttribute(name="nomEquipe",required = true)
public String getNomEquipe() {
return nomEquipe;
}
public void setNomEquipe(String nomEquipe) {
this.nomEquipe = nomEquipe;
}
@XmlAttribute(name="score",required = true)
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}

-Code permettant le Marshalling des objets annots pour la


cration du fichier XML :
Code source:
public class XmlJaxb_qeustion5 {
public static void main(String[] args) {
try {
Statement st = (Statement) new
ConnectionDatabase.ConnectionFiFA().getConn().createStatement();
15

ResultSet rs = st.executeQuery("select * from equipe");


String nomEquipe;
String numeroEquipe;
int score;
/* Cration de la liste des equipes */
ArrayList<JAXB.annotedObjects_question5.Equipe> listeEquipe = new ArrayList<>();
while(rs.next())
{
numeroEquipe = rs.getString(1);
nomEquipe = rs.getString(2);
score = Integer.parseInt(rs.getString(3));
listeEquipe.add(new JAXB.annotedObjects_question5.Equipe(numeroEquipe, nomEquipe,
score));
}
/* cration de la racine avec passage de la liste des equipes au constructeur*/
Equipes equipes = new Equipes(listeEquipe);
/* Marshalling des objets en Xml avec JAXb */
try {
File file = new File("equipesJAXB.xml");
JAXBContext context = JAXBContext.newInstance(Equipes.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.marshal(equipes,file);
} catch (JAXBException ex) {ex.printStackTrace();
}
/* Fin Marshalling */
st.close();
} catch (SQLException ex) {
ex.printStackTrace();}}}

Question 7 ( reprise question 6) :


Rponse :
-Dans cas de notre TP, annoter les classes est chose simple vue quand qu'il y en
a que 2 , mais dans le cas o ou le nombres de classes est beaucoup plus important il
serait plutt compliqu de les annoter une par une. Pour faire simple , il existe un script
Shell lanc par la commande xjc qui prend en paramtre un schma
XLM et permet de faire un mapping gnrant ainsi des classes
annotes prte tre Marshalles avec JAXB.

-Voici les deux lignes de commandes excuter pour faire un mapping


des deux classes Equipe et Matche dans notre projet :

Code source :
16

public class XmlJAXBmain_question7 {


public static void main(String[] args) throws SQLException, DatatypeConfigurationException,
JAXBException, ParseException {
System.out.println("Numero d'quipe ?");
Scanner sc = new Scanner(System.in);
String numero =sc.next();
Statement st = (Statement) new
ConnectionDatabase.ConnectionFiFA().getConn().createStatement();
ResultSet rs = st.executeQuery("select * from matchs where equipea='"+numero+"' or
equipeb='"+numero+"'");
ArrayList<Matchs> listeMatch = new ArrayList<>();
while(rs.next())
{
listeMatch.add(new Matchs(rs.getString(2),rs.getString(3),
rs.getString(4),rs.getString(5),rs.getString(6),rs.getString(7)));
}
// tri du tableau des matches pour remettre l'equipe voulue dans le bon ordre
/*Le boucle suivante permet d'avoir l'adversaire toujours dans l'attribut eqb*/
for(int i=0;i<listeMatch.size();i++)
{
if(listeMatch.get(i).getEqb().equals(numero))
{
String a=listeMatch.get(i).getEqa();
String b=listeMatch.get(i).getEqb();
String c=listeMatch.get(i).getRes();
String d=listeMatch.get(i).getButm();
String e=listeMatch.get(i).getBute();
listeMatch.get(i).setEqa(b);
listeMatch.get(i).setEqb(a);
listeMatch.get(i).setButm(e);
listeMatch.get(i).setBute(d);
if(! c.equals("galit"))
{
if(c.equals("perdu"))
{
listeMatch.get(i).setRes("gagn");
}
else
listeMatch.get(i).setRes("perdu");
}}}
// Reconstitution des noms des quipes
rs = st.executeQuery("select nomEquipe from equipe where numero='"+numero+"'");
String nomEquipeA=null;
String nomEquipeB=null;
while(rs.next())
{
nomEquipeA=rs.getString(1);
}
for(int i=0;i<listeMatch.size();i++)
{
// Remplacement du numero de l'equipe voulue par son nom
listeMatch.get(i).setEqa(nomEquipeA);
// Remplacement des equipes adversaires par leur nom
rs = st.executeQuery("select nomEquipe from equipe where
numero='"+listeMatch.get(i).getEqb()+"'");
17

while(rs.next())
{
listeMatch.get(i).setEqb(rs.getString(1));
}}
st.close();
List<Matche> listeMatcheToMarshall = new ArrayList<Matche>();
// Cration d'une liste de matches
for(int i=0;i<listeMatch.size();i++)
{
SimpleDateFormat dt = new SimpleDateFormat("yyyyy-mm-dd");
Date date = dt.parse(listeMatch.get(i).getDate());
GregorianCalendar c = new GregorianCalendar();
c.setTime(date);
XMLGregorianCalendar date2 =
DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
listeMatcheToMarshall.add(new Matche(
listeMatch.get(i).getEqb(),Integer.parseInt(listeMatch.get(i).getBute()),
Integer.parseInt(listeMatch.get(i).getBute()),date2,listeMatch.get(i).getRes()));
}
// Cration de l'objet Equipe qui est le noeud de document XML
Equipe equipe = new Equipe( listeMatcheToMarshall,nomEquipeA,numero);
// Marshalling Object to Xml avec JAXb
File file = new File("equipesJAXBxsd.xml");
JAXBContext context = JAXBContext.newInstance(Equipe.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.marshal(equipe,file);
// Fin marshalling
}
}

Question 8 :
-Feuille de style XSL qui permet de transformer le fichier XML en une
liste
droulante HTML qui contient toutes les quipes.
Code source :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="/equipes">
<html>
<head>
</head>
<body>
<select>
<xsl:for-each select="equipe">
<option><xsl:value-of select="@nomEquipe"></xsl:value-of> </option>
</xsl:for-each>
</select>
18

</body>
</html>
</xsl:template>
</xsl:stylesheet>

Rendu de la transformation XSLT :

Question 9 :
-Ecrire une feuille de style XSL qui permet de transformer le deuxime
fichier
XML en un tableau HTML qui permet de lister les matches jous.
On affichera dans ce tableau la date du matche, ladversaire, les buts
marqus, les buts encaisss,
le nombre de points (3 pour un matche
gagn, 1 pour un matche
nul et 0 pour un matche perdu).
On
affichera galement la fin du tableau :
Le nombre total de buts marqus
Le nombre total de buts encaisss
Le nombre de matches jous
Le nombre de matches gagns.
Le nombre de matches nuls
Le nombre de matches perdus
Le total des points.
Code source :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="/equipe">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title></title>
</head>
<body>
<table align="center" bordercolor="blue" border="1" width="600">
<th bgcolor="#33CCFF" colspan="4"><xsl:value-of select="@nom"></xsl:value-of></th>
<xsl:for-each select="matche">
19

<tr border="0" bgcolor="#FFFF33" align="center">


<td colspan="2" width="300" >Adversaire : <xsl:value-of
select="adversaire"></xsl:value-of></td>
<td colspan="2" width="300">Date : <xsl:value-of select="@date"></xsl:value-of></td>
</tr>
<tr align="center" width="610">
<td colspan="2" width="300">Buts marqus: <xsl:value-of
select="butsMarques"></xsl:value-of></td>
<td colspan="2" width="300">Buts encaisss: <xsl:value-of
select="butsEncaisses"></xsl:value-of></td>
</tr>
<tr align="center" width="610">
<td colspan="4" width="600">Points:
<xsl:choose>
<xsl:when test="@resultat='gagn'">
<xsl:text>3</xsl:text>
</xsl:when>
<xsl:when test="@resultat='perdu'">
<xsl:text>0</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>1</xsl:text>
</xsl:otherwise>
</xsl:choose>
</td>
</tr>
</xsl:for-each>
<tr bgcolor="#33FF33" align="center"> <td colspan="2" width="300">Total buts
marqus: <xsl:value-of select="sum(matche/butsMarques)"></xsl:value-of></td>
<td colspan="2" width="300">Total buts encaisss: <xsl:value-of
select="sum(matche/butsEncaisses)"></xsl:value-of></td> </tr>
<tr bgcolor="#33FF33" align="center">
<td width="150">Matches jous: <xsl:value-of select="count(matche)"></xsl:valueof></td>
<td width="150">Gagns: <xsl:value-of select="count(matche[@resultat=
'gagn'])"></xsl:value-of></td>
<td width="150">Nuls: <xsl:value-of select="count(matche[@resultat=
'galit'])"></xsl:value-of></td>
<td width="150">Perdus: <xsl:value-of select="count(matche[@resultat=
'perdu'])"></xsl:value-of></td>
</tr>
<tr bgcolor="#33FF33" align="center">
<td colspan="4" width="610"> Total des points:
<xsl:value-of select="count(matche[@resultat=
'gagn'])*3+count(matche[@resultat= 'galit'])"></xsl:value-of>
</td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

20

Rendu de la transformation XSLT :

Illustration 5: Tableau HTML gnr par transformation XSLT

Question 10 :
-crire une feuille de style XSL qui permet de transformer le fichier
XML qui contient les quipes en un document SVG qui affiche un graphique
anim qui montre le score de chaque quipe en les classant par ordre
dcroissant .
Code source :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs"
version="1.1">
<xsl:output indent="yes"></xsl:output>
<xsl:template match="/">
<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"
width="100%" height="100%">
<line x1="20" y1="400" x2="20" y2="20" stroke="blue" stroke-width="2"/>
<line x1="20" y1="400" x2="600" y2="400" stroke="blue" stroke-width="2"/>
<text stroke="blue" fill="blue" x="200" y="50">Scores des quipes</text>
<xsl:for-each select="equipes/equipe">
<xsl:sort select="@score" data-type="number" order="descending"/>
21

<xsl:variable name="H" select="@score*4"></xsl:variable>


<xsl:variable name="X" select="position()*80"></xsl:variable>
<xsl:variable name="Y" select="398-$H"></xsl:variable>
<text stroke="blue" fill="blue" rotation="60"
transform="translate({position()*80},420)rotate(25)"> <xsl:value-of
select="@nomEquipe"/></text>
<rect x="{$X}" y="{$Y}" height="{$H}" width="10" stroke="#3DFF5A" stroke-width="2"
fill="#3DFF5A">
<animate attributeName="height" dur="2s" from="0" to="{$H}"/>
<animate attributeName="y" dur="2s" from="400" to="{398-$H}"/>
</rect>
</xsl:for-each>
</svg>
</xsl:template>
</xsl:stylesheet>

Rendu du SVG :

22

Question 11 :
-Web service en java qui permet de :
Consulter toutes les quipes
Consulter les matches jous par une quipe.
Rponse :
-Pour la mise en place du WebService fifa , nous avons opt pour JAXWS qui est une api pour dvelopper des WebService tendus ( WSLD +
SOAP) via la plate-forme de dveloppement JAVA.
-L'utilisation de cette api est assez simple , il suffit d'annoter les classes
et ses mthodes par des annotations dfinies dans l'API JAX-WS.
Les principales annotations sont : @WebService , @WebMethod et
@WebParam.

Code source :
@WebService(name="FifaWebService")
public class FifaWS {
@WebMethod
23

public ArrayList<Matche> consulterMatchesParEquipe(@WebParam(name="numEquipe") String


numEquipe)
{
ArrayList<Matche> listeMatches = null;
try{ try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException ex) {
Logger.getLogger(FifaWS.class.getName()).log(Level.SEVERE, null, ex);
}
Connection conn = (Connection) DriverManager.getConnection
("jdbc:mysql://localhost:3306/fifa","root","");
Statement st = conn.createStatement();
String numero="E1";
ResultSet rs = st.executeQuery("select * from matchs where equipea='"+numero+"' or
equipeb='"+numero+"'");
listeMatches = new ArrayList<>();
while(rs.next())
{
listeMatches.add(new Matche(rs.getString(2),rs.getString(3),
rs.getString(4),rs.getString(5),rs.getString(6),rs.getString(7)));
}
// tri du tableau des match pour remettre l'equipe voulue dans le bon ordre
for(int i=0;i<listeMatches.size();i++)
{
if(listeMatches.get(i).getEqb().equals(numero))
{
String a=listeMatches.get(i).getEqa();
String b=listeMatches.get(i).getEqb();
String c=listeMatches.get(i).getRes();
String d=listeMatches.get(i).getButm();
String e=listeMatches.get(i).getBute();
listeMatches.get(i).setEqa(b);
listeMatches.get(i).setEqb(a);
listeMatches.get(i).setButm(e);
listeMatches.get(i).setBute(d);
if(! c.equals("galit")){
if(c.equals("perdu"))
listeMatches.get(i).setRes("gagn");
else
listeMatches.get(i).setRes("perdu");
}}}
// Reconstitution des noms des quipes
rs = st.executeQuery("select nomEquipe from equipe where numero='"+numero+"'");
String nomEquipeA=null;
while(rs.next())
{
nomEquipeA=rs.getString(1);
}
for(int i=0;i<listeMatches.size();i++)
{ // Remplacement du numero de l'equipe voulue par son nom
listeMatches.get(i).setEqa(nomEquipeA);
// Remplacement des equipes adversaires par leur nom
rs = st.executeQuery("select nomEquipe from equipe where
numero='"+listeMatches.get(i).getEqb()+"'");
while(rs.next())
24

{
listeMatches.get(i).setEqb(rs.getString(1));
} }
st.close(); }
catch(SQLException ex){ex.printStackTrace();}
return listeMatches;
}
@WebMethod
public ArrayList<wsfifa.Equipe> listerEquipes()
{
ArrayList<Equipe> listeEquipe = null;
try{
Class.forName("com.mysql.jdbc.Driver");
Connection conn = (Connection) DriverManager.getConnection
("jdbc:mysql://localhost:3306/fifa","root","");
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("select * from equipe");
listeEquipe = new ArrayList<Equipe>();
String nomEquipe;
String numeroEquipe;
int score;
while(rs.next())
{
numeroEquipe = rs.getString(1);
nomEquipe = rs.getString(2);
score = Integer.parseInt(rs.getString(3));
listeEquipe.add(new Equipe(numeroEquipe, nomEquipe, score));
}
st.close();
}catch(Exception ex){ex.printStackTrace();}
return listeEquipe;
}}
-Le

suivant :

dploiement du WebService se fait par un simple mthode comme


Endpoint.publish("http://localhost:12393/FifaWebService", new FifaWS());

25

Question 12 :
Tester le web service avec Oxygen :

Illustration 6: Appel des mthodes publi dans le WebService

26

Illustration 7: Appel des mthodes publi dans le WebService


27

Question 13 :
-Client java pour le web service :
Rponse :
-Pour crer un client java d'un WebService, il existe une commande
wsimport qui permet de parser le fichier WSDL publi par le
WebService et de gnrer l'implmentation des classes du WebService en
questions.
-Dans notre cas la commande excute est :

Code Source :
public class ClientFifaWS {
public static void main(String[] args) {
FifaWSService fifaWSService = new FifaWSService();
FifaWebService fifaWebService = fifaWSService.getFifaWebServicePort();
List<Equipe> listeEquipe = fifaWebService.listerEquipes();
for(int i=0;i<listeEquipe.size();i++)
{ System.out.println("------");
System.out.println(listeEquipe.get(i).getNomEquipe());
System.out.println(listeEquipe.get(i).getNumero());
System.out.println(listeEquipe.get(i).getScore());
}
List<Matche> listeMatchePEquipe = fifaWebService.consulterMatchesParEquipe("E1");
for(int i=0;i<listeMatchePEquipe.size();i++)
{
System.out.println("Equipe
: "+listeMatchePEquipe.get(i).getEqa());
System.out.println("Adversaire : "+listeMatchePEquipe.get(i).getEqb());
System.out.println("Date
: "+listeMatchePEquipe.get(i).getDate());
System.out.println("Rsultat
: "+listeMatchePEquipe.get(i).getRes());
System.out.println("Buts marqus : "+listeMatchePEquipe.get(i).getButm());
System.out.println("Buts encaisss : "+listeMatchePEquipe.get(i).getBute());
}}}

Question 14 :
Crer et tester les scripts PHP permettant de se connecter la base de
donnes et de gnrer les deux fichiers XML equipes.xml et
matches.xml .
Code source :

listerEquipes.php

<?php
require("connexion.php");
$conn = new connexion("fifa","localhost","root","");
$result = $conn->Requete("select * from equipe ");
header('Content-Type:text/xml');
$dom = new DOMDocument('1.0','utf-8');
$racine = $dom->createElement('equipes',' ');
$dom->appendChild($racine);
28

if(mysql_num_rows($result) != 0 )
{
while ($l = mysql_fetch_row($result)) {
$equipe = $dom->createElement("equipe");
$numero = $dom->createAttribute("numero");
$numero->value = $l['0'];
$nomEquipe = $dom->createAttribute("nomEquipe");
$nomEquipe->value = $l['1'];
$score = $dom->createAttribute("score");
$score->value = $l['2'];
$equipe->appendChild($numero);
$equipe->appendChild($nomEquipe);
$equipe->appendChild($score);
$racine->appendChild($equipe);
}
}
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
echo $dom->saveXML();
?>

Code source : matcheParEquipe.php


<?php
require("connexion.php");
require ("matche.php");
$conn = new connexion("fifa","localhost","root","");
$numeroEquipe = $_GET['numeroEq'];
$conn->Requete("SET NAMES UTF8");
$result = $conn->Requete("select * from matchs where equipea='".$numeroEquipe."' or equipeb='".
$numeroEquipe."' ");
$tabEquipe = array();
if(mysql_num_rows($result) != 0 )
{
while($l = mysql_fetch_row($result))
{
$tabEquipe[] = new matche($l['1'],$l['2'],$l['3'],$l['4'],$l['5'],$l['6']);
}
// Tri du tableau pour avoir l'quipe demand toujours en premire position
for ($x=0; $x< count($tabEquipe); $x++)
{
if($tabEquipe[$x]->getEquipea() != $numeroEquipe)
{
if($tabEquipe[$x]->getResultat() == 'galit')
{
$tabEquipe[$x]->setEquipeb($tabEquipe[$x]->getEquipea());
$tabEquipe[$x]->setEquipea($numeroEquipe);
$butsM = $tabEquipe[$x]->getBute();
$tabEquipe[$x]->setBute($tabEquipe[$x]->getButm());
$tabEquipe[$x]->setButm($butsM);
}
else
29

{
$tabEquipe[$x]->setEquipeb($tabEquipe[$x]->getEquipea());
$tabEquipe[$x]->setEquipea($numeroEquipe);
$butsM = $tabEquipe[$x]->getBute();
$tabEquipe[$x]->setBute($tabEquipe[$x]->getButm());
$tabEquipe[$x]->setButm($butsM);
if($tabEquipe[$x]->getResultat() == 'perdu')
{
$tabEquipe[$x]->setResultat('gagn');
}
else
{
$tabEquipe[$x]->setResultat('perdu');
}}}}
// Rcupration du nom de l'quipe cherche:
$result = $conn->Requete("select nomequipe from equipe where numero='".$numeroEquipe."' ");
while ($l = mysql_fetch_row($result))
{
$equiea = $l['0'];
}
// Rcupration des noms des adversaires
for ($x=0; $x< count($tabEquipe); $x++)
{
$result = $conn->Requete("select nomequipe from equipe where numero='".$tabEquipe[$x]>getEquipeb()."' ");
while ($l = mysql_fetch_row($result))
{
$tabEquipe[$x]->setEquipeb($l['0']);
}
}
}
// gnration du fichier XML en utilisant la bibliothque DOM prdfini par PHP5
$dom = new DOMDocument('1.0','utf-8');
$racine = $dom->createElement('equipe','');
$numero = $dom->createAttribute("numero");
$numero->value = $numeroEquipe;
$racine->appendChild($numero);
$nomEquipe = $dom->createAttribute("nom");
$result = $conn->Requete("select nomequipe from equipe where numero='".$numeroEquipe."' ");
while ($l = mysql_fetch_row($result))
{
$nomEquipe->value = $l['0'];
}
$racine->appendChild($nomEquipe);
header('Content-Type:text/xml');
for ($x=0; $x< count($tabEquipe); $x++)
{
$nMatche = $dom->createElement("matche");
$date = $dom->createAttribute("date");
$date->value = $tabEquipe[$x]->getDate();
$nMatche->appendChild($date);
$r = $dom->createAttribute("resultat");
$r->value = $tabEquipe[$x]->getResultat() ;
$nMatche->appendChild($r);
30

//
$adversaire = $dom->createElement("adversaire",$tabEquipe[$x]->getEquipeb());
$butsmarques = $dom->createElement("butsMarques",$tabEquipe[$x]->getButm());
$butsencaisses = $dom->createElement("butsEncaisses",$tabEquipe[$x]->getBute());
//
$nMatche->appendChild($adversaire);
$nMatche->appendChild($butsmarques);
$nMatche->appendChild($butsencaisses);
//
$racine->appendChild($nMatche);
}
$xslt = $dom->createProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="matches.xsl"');
$dom->appendChild($xslt);
$dom->appendChild($racine);
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
echo $dom->saveXML();
?>

31

Question 15 :
- Crer une application avec AJAX qui permet dafficher les quipes dans une
liste
droulante et en slectionnant une quipe, afficher les matches jous par cette quipe.

Rponse :
tapes:
1. A l'ouverture de la page web en par un utilisateur, le code AJAX fait appel un
script PHP, ce script se connecte la base de donnes et rcupre les quipes
depuis la table equipe . A l'aide de la bibliothque prdfinie DOM de php5 ,
ce script va crer un document XML qui contiendra la liste des quipes. Une fois
le document XML rcupr par AJAX , il va falloir le formater par un fichier XSL
qui gnre une liste droulante contenant la liste des quipes qui elle, sera
intgr dans un div dans la page HTML.
2. Lorsque une quipe est choisie dans la liste droulante, un vnement est
dclench faisant appel un un script AJAX, ce script fait appel un script PHP
qui se connecte la base de donnes, rcupre les matches jous par l'quipe
qui t slectionne dans la liste droulante ensuite cre un document XML et
le renvoie au script AJAX qui lui a fait appel. Une fois le document XML rcupr,
celui-ci est transform par un fichier XSL qui gnre un tableau HTML contenant
les matches jous par lquipe en slectionne.

Code source : equipes.xsl


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="/equipes">
<html>
<head>
</head>
<body>
<select id="listeEquipes" onchange="chargerLesMatches(this.value)" >
<xsl:for-each select="equipe" >
<option><xsl:value-of select="@nomEquipe"></xsl:value-of> </option>
</xsl:for-each>
</select>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Code source : listerEquipes.php


<?php
require("connexion.php");
$conn = new connexion("fifa","localhost","root","");
$result = $conn->Requete("select * from equipe");
32

header('Content-Type:text/xml');
$dom = new DOMDocument('1.0','utf-8');
$racine = $dom->createElement('equipes','');
$xslt = $dom->createProcessingInstruction('xml-stylesheet', 'type="text/xsl"
$dom->appendChild($xslt);
$dom->appendChild($racine);
if(mysql_num_rows($result) != 0 )
{

href="equipe.xsl"');

while ($l = mysql_fetch_row($result)) {


$equipe = $dom->createElement("equipe");
$numero = $dom->createAttribute("numero");
$numero->value = $l['0'];
$nomEquipe = $dom->createAttribute("nomEquipe");
$nomEquipe->value = $l['1'];
$score = $dom->createAttribute("score");
$score->value = $l['2'];
$equipe->appendChild($numero);
$equipe->appendChild($nomEquipe);
$equipe->appendChild($score);
$racine->appendChild($equipe);
}
}
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
echo $dom->saveXML();
?>

Code source : matches.xsl


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="/equipe">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title></title>
</head>
<body>
<table bordercolor="blue" border="1" width="600">
<th bgcolor="#33CCFF" colspan="4"><xsl:value-of select="@nom"></xsl:value-of></th>
<xsl:for-each select="matche">
<tr border="0" bgcolor="#FFFF33" align="center">
<td colspan="2" width="300" >Adversaire : <xsl:value-of select="adversaire"></xsl:valueof></td>
<td colspan="2" width="300">Date : <xsl:value-of select="@date"></xsl:value-of></td>
</tr>
<tr align="center" width="610">
<td colspan="2" width="300">Buts marqus: <xsl:value-of
33

select="butsMarques"></xsl:value-of></td>
<td colspan="2" width="300">Buts encaisss: <xsl:value-of
select="butsEncaisses"></xsl:value-of></td>
</tr>
<tr align="center" width="610">
<td colspan="4" width="600">Points:
<xsl:choose>
<xsl:when test="@resultat='gagn'">
<xsl:text>3</xsl:text>
</xsl:when>
<xsl:when test="@resultat='perdu'">
<xsl:text>0</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>1</xsl:text>
</xsl:otherwise>
</xsl:choose>
</td>
</tr>
</xsl:for-each>
<tr bgcolor="#33FF33" align="center"> <td colspan="2" width="300">Total buts marqus:
<xsl:value-of select="sum(matche/butsMarques)"></xsl:value-of></td>
<td colspan="2" width="300">Total buts encaisss: <xsl:value-of
select="sum(matche/butsEncaisses)"></xsl:value-of></td> </tr>
<tr bgcolor="#33FF33" align="center">
<td width="150">Matches jous: <xsl:value-of select="count(matche)"></xsl:value-of></td>
<td width="150">Gagns: <xsl:value-of select="count(matche[@resultat=
'gagn'])"></xsl:value-of></td>
<td width="150">Nuls: <xsl:value-of select="count(matche[@resultat= 'galit'])"></xsl:valueof></td>
<td width="150">Perdus: <xsl:value-of select="count(matche[@resultat= 'perdu'])"></xsl:valueof></td>
</tr>
<tr bgcolor="#33FF33" align="center">
<td colspan="4" width="610"> Total des points:
<xsl:value-of select="count(matche[@resultat= 'gagn'])*3+count(matche[@resultat=
'galit'])"></xsl:value-of>
</td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Code source : matcheParEquipe.php


<?php
require("connexion.php");
require ("matche.php");
$conn = new connexion("fifa","localhost","root","");
$conn->Requete("SET NAMES UTF8");
$nomE=$_GET['nomEq'];
34

$resNumEq = $conn->Requete("select numero from equipe where nomEquipe='".$nomE."'");


while($l = mysql_fetch_row($resNumEq))
{
$numeroEquipe =$l['0'];
}
$result = $conn->Requete("select * from matchs where equipea='".$numeroEquipe."' or equipeb='".
$numeroEquipe."' ");
$tabEquipe = array();
if(mysql_num_rows($result) != 0 ){
while($l = mysql_fetch_row($result))
{
$tabEquipe[] = new matche($l['1'],$l['2'],$l['3'],$l['4'],$l['5'],$l['6']);
}
// flip du tableau pour avoir l'quipe demand tjrs en premire position
for ($x=0; $x< count($tabEquipe); $x++)
{
if($tabEquipe[$x]->getEquipea() != $numeroEquipe)
{
if($tabEquipe[$x]->getResultat() == 'galit')
{
$tabEquipe[$x]->setEquipeb($tabEquipe[$x]->getEquipea());
$tabEquipe[$x]->setEquipea($numeroEquipe);
$butsM = $tabEquipe[$x]->getBute();
$tabEquipe[$x]->setBute($tabEquipe[$x]->getButm());
$tabEquipe[$x]->setButm($butsM);
}
else
{
$tabEquipe[$x]->setEquipeb($tabEquipe[$x]->getEquipea());
$tabEquipe[$x]->setEquipea($numeroEquipe);
$butsM = $tabEquipe[$x]->getBute();
$tabEquipe[$x]->setBute($tabEquipe[$x]->getButm());
$tabEquipe[$x]->setButm($butsM);
if($tabEquipe[$x]->getResultat() == 'perdu')
{
$tabEquipe[$x]->setResultat('gagn');
}
else
{
$tabEquipe[$x]->setResultat('perdu');
}}}}
// Rcupration nom quipeA:
$result = $conn->Requete("select nomequipe from equipe where numero='".$numeroEquipe."' ");
while ($l = mysql_fetch_row($result))
{
$equiea = $l['0'];
}
// Rcupration des noms des quipe
for ($x=0; $x< count($tabEquipe); $x++)
{
$result = $conn->Requete("select nomequipe from equipe where numero='".$tabEquipe[$x]>getEquipeb()."' ");
while ($l = mysql_fetch_row($result))
{
35

$tabEquipe[$x]->setEquipeb($l['0']);
}}}
$dom = new DOMDocument('1.0','utf-8');
$racine = $dom->createElement('equipe','');
$numero = $dom->createAttribute("numero");
$numero->value = $numeroEquipe;
$racine->appendChild($numero);
$nomEquipe = $dom->createAttribute("nom");
$result = $conn->Requete("select nomequipe from equipe where numero='".$numeroEquipe."' ");
while ($l = mysql_fetch_row($result))
{
$nomEquipe->value = $l['0'];
}
$racine->appendChild($nomEquipe);
header('Content-Type:text/xml');
for ($x=0; $x< count($tabEquipe); $x++)
{
$nMatche = $dom->createElement("matche");
$date = $dom->createAttribute("date");
$date->value = $tabEquipe[$x]->getDate();
$nMatche->appendChild($date);
$r = $dom->createAttribute("resultat");
$r->value = $tabEquipe[$x]->getResultat() ;
$nMatche->appendChild($r);
//
$adversaire = $dom->createElement("adversaire",$tabEquipe[$x]->getEquipeb());
$butsmarques = $dom->createElement("butsMarques",$tabEquipe[$x]->getButm());
$butsencaisses = $dom->createElement("butsEncaisses",$tabEquipe[$x]->getBute());
//
$nMatche->appendChild($adversaire);
$nMatche->appendChild($butsmarques);
$nMatche->appendChild($butsencaisses);
//
$racine->appendChild($nMatche);
}
$dom->appendChild($racine);
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
echo $dom->saveXML();

Code source :

index.html

<html>
<head>
<script>
// chargement XML
function loadXMLDoc(filename,nomEquipe)
{
if (window.ActiveXObject)
{
xhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
36

else
{
xhttp = new XMLHttpRequest();
}
if(filename == 'equipes.xml' )
// xhttp.open("GET","listerEquipes.php", false);
xhttp.open("GET","listerEquipes.php", false);
else if(filename == 'equipes.xsl')
xhttp.open("GET", filename, false);
else if (filename == 'matches.xml')
xhttp.open("GET","matcheParEquipe.php?nomEq="+nomEquipe, false);
//xhttp.open("GET", filename, false);
else if(filename == 'matches.xsl')
xhttp.open("GET", filename, false);
try {xhttp.responseType = "msxml-document"} catch(err) {} // Helping IE11
xhttp.send("");
return xhttp.responseXML;
}
function chargerLalisteEquipe(){
xml = loadXMLDoc("equipes.xml",'');
xsl = loadXMLDoc("equipes.xsl",'');
// code for IE
if (window.ActiveXObject || xhttp.responseType == "msxml-document")
{
ex = xml.transformNode(xsl);
document.getElementById("listeEquipes").innerHTML = ex;
}
// code for Chrome, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
{
xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
resultDocument = xsltProcessor.transformToFragment(xml, document);
document.getElementById("listeEquipes").appendChild(resultDocument);
}
}
function chargerLesMatches(nomEquipe){
xml = loadXMLDoc("matches.xml",nomEquipe);
xsl = loadXMLDoc("matches.xsl",'');
// code for IE
if (window.ActiveXObject || xhttp.responseType == "msxml-document")
{
ex = xml.transformNode(xsl);
document.getElementById("matchesParEquipe").innerHTML = ex;
}
// code for Chrome, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
{
xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
37

resultDocument = xsltProcessor.transformToFragment(xml, document);


document.getElementById("matchesParEquipe").innerHTML ="";
document.getElementById("matchesParEquipe").appendChild(resultDocument);
}
}
</script>
</head>
<body onload="chargerLalisteEquipe()">
<!-- Le contenu des deux div sont charg par le code AJAX-->
<div id="listeEquipes"></div> ddd
<div id="matchesParEquipe"></div>
</body>
</html>

Application web :

Illustration 8: Page web affichant les informations propre une quipe

38

Conclusion
La ralisation de ce TP a t trs enrichissante par la
diversit des techniques et langages de programmations qui y
ont t abords tout au long.
Ce travail nous a permis aussi de passer en vue et de toucher
la puissance de XML qui est devenu un langage
incontournable et indispensable au dveloppement d'une
application distribue.

39

Vous aimerez peut-être aussi