Comment parser facilement du XML
Formation
En Semi-présenciel Paris
Avez-vous besoin d'un coach de formation?
Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.
Description
-
Typologie
Formation
-
Méthodologie
En semi-présentiel
-
Lieu
Paris
Grâce à cette formation vous pourrez acquérir les connaissances nécessaires qui vous permettrons d’ajouter des compétences à votre profil et obtenir de solides aptitude qui vous offriront de nombreuses opportunités professionnelles.
Les sites et dates disponibles
Lieu
Date de début
Date de début
Les Avis
Le programme
Bonjour à tous.
Vous venez d'apprendre le XML, et vous ne savez pas à quoi ça va bien pouvoir vous servir ? Ou vous voulez une méthode simple pour lire un fichier XML comme si il s'agissait d'un fichier XHTML ?
Eh bien vous êtes au bon endroit !
Nous allons apprendre à « transformer » du XML très facilement.
En avant !
Dans cette rubrique, nous allons aborder la théorie, et LA technique utilisée pour parser simplement du XML.
Le XMLJe ne vais pas parler du XML, considérant que vous avez déjà lu et compris ce tuto et celui-ci (au moins la première partie).
La techniqueNous allons utiliser un fichier pour parser (= transformer en un autre fichier) notre fichier XML. Oui, c'est vrai, ça peut paraître un peu bizarre de transformer un fichier en un autre fichier par un fichier... o_O
Ce fichier sera écrit dans un langage que vous devriez bien connaître, puisqu'il s'agit du... XML. :-° En effet, ce langage nommé « stylesheet » (« feuille de style » en anglais), ou XSLT (eXtensible Stylesheet Language Transformation) est totalement basé sur le XML.
Le XSLT est un langage définit par le W3C et qui sert tout spécialement à la transformation de fichiers XML en... d'autres fichiers XML... Or, comme certains langages que vous devez connaître (comme le xHTML par exemple) sont eux aussi basés sur le XML...
Pour « jumeler » la feuille de style avec un document XML, on place le code suivant juste après la toute première ligne XML :
<?xml version="1.0" encoding="ISO-8859-1" ?><!--Première ligne XML--> <?xml-stylesheet type='text/xsl' href='nomStylesheet.xsl'?><!--Ligne de jumelage--> <!--Code-->Ici, le fichier XML sera couplé avec le fichier « nomStylesheet.xsl ».
Les stylesheets ont leur extension en .xsl, pensez-y lorsque vous enregistrerez votre fichier !
Quelques informations supplémentairesVous serez plus loin appelés à manier les signes « < » et « > ». Or, ceux-ci sont déjà utilisés pour les balises. Veillez donc à les remplacer par « < » pour « < » (Lower Than ; plus petit que), et « > » pour « > » (Greater Than ; plus grand que).
Ainsi, un « <= » se transforme en « <= ». Pensez-y : c'est la source de beaucoup d'erreurs !
Oui, je n'utilise pas le PHP. Mais il y a un tuto écrit justement pour ça.
Les basesComme tout langage, il y a des bases. Autant vous dire qu'elles ne sont pas très difficiles. Sachez que nous utiliseront un namespace nommé « xsl ».
Le code de baseIl y a un code de base sans lequel le fichier ne servirait strictement à rien :
<?xml version="1.0" encoding="ISO-8859-1"?><!--Vous devez connaître :)--> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!--Vous vous en doutez : on mettra le code ici--> </xsl:stylesheet>Analysons tout ça...
D'abord, la balise XML que vous devez connaître.
Ensuite, une balise XML qui permet de dire qu'il s'agit de XSLT (avec sa version) et de faire un lien vers le site W3C par lequel passera notre document pour être transformé.
Allons un peu plus loin : en effet, si vous compilez même avec une stylesheet correcte un fichier XML... ça ne marchera pas. Pourquoi ? Parce qu'on n'a pas défini les sorties !
<xsl:output method="html" encoding="ISO-8859-1" doctype-public="-//W3C//DTD XHTML//EN" doctype-system="http://www.w3.org/TR/2001/REC-xhtml11-20010531" indent="yes" />Je ne vais bien sûr pas détailler tous les paramètres. Sachez simplement que « method » est l'attribut de la méthode de transformation. Ici, c'est « html », mais cette valeur peut vouloir dire aussi « XHTML ». Vous pouvez tout mettre tant que vous connaissez le doctype correspondant (le lien de l'attribut 'doctype-system'). « encoding », c'est le type de caractère. Enfin, « indent » dit si les indentations du XHTML doivent être respectées (pour les paragraphes, les listes, etc.).
Les balises en elles-mêmesBon, nous y voilà...
Commençons par ce que je juge être l'essentiel :
Cette ci s'activera à chaque fois que, dans la lecture du fichier XML, le fichier rencontrera la balise <nom_balise></nom_balise>ou <nom_balise />. À ce moment, le fichier va écrire dans le fichier de sortir le code qu'il y a entre les balises (en l'interprétant bien-sûr :) ).
Mais si je veux récupérer le contenu des attributs et balises ?
Petits impatients : :D La suite arrive !
C'est vrai qu'avec ce code, le parser ne se pose pas de question : il remplace, un point c'est tout. Cependant, nous pouvons faire en sorte d'écrire le texte des attributs et du contenu de la balise :
Là il y a un truc (hahem :-° ). Entre les guillemets, il faut mettre une requête XPATH. Nous verrons ça en détail plus loin, en attendant voici quelques requêtes simples :
select="." : récupère le contenu de la balise en cours de parsage
select="@attribut" : récupère la valeur de l'attribut nommé « attribut ».
Enfin, il nous reste une dernière balise à aborder dans cette partie :
<xsl:apply-templates select="nom_balise2" />Cette balise permet d'appeler le parsage d'une autre balise, la balise <nom_balise2></nom_balise2> (ou <nom_balise2 />), tant que cette balise est fille de la balise en cours de parsage. Sachez que vous devez mettre là aussi une requête XPATH. Pour appeler le parsage de toutes les balises filles, mettez simplement select="*".
En fait, à chaque fois que dans une balise XSLT vous voyez l'attribut « <italique>select</itlaique> », c'est que vous devez mettre une requête XPATH.
Bon, un petit exemple ?
Le XML à parser :
<?xml version="1.0" encoding="ISO-8859-1" ?> <?xml-stylesheet type='text/xsl' href='parser.xsl'?> <A> <B>aaa</B> <C> <D att="1"/> <D att="2"/> </C> <B>bbb</B> </A>et sa stylesheet :
<?xml version="1.0" encoding="ISO-8859-1" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="ISO-8859-1" doctype-public="-//W3C//DTD XHTML//EN" doctype-system="http://www.w3.org/TR/2001/REC-xhtml11-20010531" indent="yes" /> <xsl:template match="A"> <html><body> <xsl:apply-templates select="*" /> </body></html> </xsl:template> <xsl:template match="B"> <xsl:value-of select="." /><br /> </xsl:template> <xsl:template match="C"> <xsl:apply-templates select="D" /> </xsl:template> <xsl:template match="D"> <xsl:value-of select="@att" /><br /> </xsl:template> </xsl:stylesheet>Ici, la stylesheet est nommée « parser.xsl ».
Vous remarquerez que j'ai mis des balises XHTML dans la stylesheet. On a tout à fait le droit ! C'est quand même notre premier but de transformer du XML en XHTML...
J'espère que vous avez tout reconnu !
Pour lancer un document XML comme s'il s'agissait d'une page XHTML, il suffit de double-cliquer sur l'icone de votre document XML. Si le lien est bien fait, vous n'aurez aucun problème, sauf peut-être des erreurs dans votre code, qui seront alors indiquées à la place du document.
Bon, un petit exercice... :diable:
Voilà mon code :
<?xml version="1.0" encoding="ISO-8859-1" ?> <!--Ici, la ligne de jumelage. Je vous laisse la faire--> <tirelire nom="Ma tirelire"> <billet5 nombre="10">Allemandes</billet5> <billet10 nombre="5">Autrichiennes</billet10> <piece2 nombre="12">Françaises</piece2> <piece2 nombre="4">Espagnoles</piece2> <cent50 nombre="6">Italiennes</cent50> </tirelire>Je veux que vous obteniez cela :
Citation : Ce que vous devez obtenir (ne tenez pas compte de la police, elle est automatique)
Tirelire : Ma tirelire
Billets de 5 euros : nombre = 10, nationalité = Allemandes
Billets de 10 euros : nombre = 5, nationalité = Autrichiennes
Pièces de 2 euros : nombre = 12, nationalité = Françaises
Pièces de 2 euros : nombre = 4, nationalité = Espagnoles
Pièces de 50 cents : nombre = 6, nationalité = Italiennes
Et pas de tricherie ! Je veux un code qui parse quand même si on change le XML !!! :colere2:
Au travail !
...
...
C'est bon ? Voilà la correction :
<?xml version="1.0" encoding="ISO-8859-1" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="ISO-8859-1" doctype-public="-//W3C//DTD XHTML//EN" doctype-system="http://www.w3.org/TR/2001/REC-xhtml11-20010531" indent="yes" /> <xsl:template match="tirelire"> <html><body>Tirelire : <xsl:value-of select="@nom" /><br /> <xsl:apply-templates select="*" /><br /> </body></html> </xsl:template> <xsl:template match="billet10"> Billets de 10 euros : nombre = <xsl:value-of select="@nombre" />, nationalité = <xsl:value-of select="." /><br /> </xsl:template> <xsl:template match="billet5"> Billets de 5 euros : nombre = <xsl:value-of select="@nombre" />, nationalité = <xsl:value-of select="." /><br /> </xsl:template> <xsl:template match="piece2"> Pièces de 2 euros : nombre = <xsl:value-of select="@nombre" />, nationalité = <xsl:value-of select="." /><br /> </xsl:template> <xsl:template match="cent50"> Pièces de 50 cents : nombre = <xsl:value-of select="@nombre" />, nationalité = <xsl:value-of select="." /><br /> </xsl:template> </xsl:stylesheet>Il faut avouer qu'il était simple, mais répétitif. Attention cependant, ce n'est pas la seule solution qui existe !
Programmez dans vos stylesheets !Cette partie n'est pas vraiment indispensable, mais je vous la recommande vivement ! En effet, il est possible de programmer dans vos stylesheets... Allons-y ! ^^
La structure if et chooseIl existe dans ce langage des structures conditionnelles : if et choose. Ne vous méprenez pas, il n'y a pas de else...
La structure ifVoici d'emblée le code :
<xsl:if test="a == b"> <!--Le code--> </xsl:if>If (= « si » en anglais) permet de tester une opération. Ici, il s'agit de « a=b ». Les opérations booléennes sont les mêmes que pour n'importe quel langage de programmation :
'<' pour « si ... inférieur à ... ».
'>' pour l'inverse.
'<=' pour « ... inférieur ou égal ... ».
'>=' pour « ... supérieur ou égal ... ».
'==' pour « ... égal ... » (attention il y a deux signes « égal »).
'!=' pour « ... différent de ... ».
Cette structure est pratique, si on utilise une fonction pour la canaliser. On apprendra ça plus tard.
La structure chooseÉtant donné que le « else » (sinon) n'existe pas dans la structure if, une autre structure a été développée. Il s'agit d'une structure où il existe des « cas » selon la valeur d'entrée :
<xsl:choose> <xsl:when test="test = a"> <!--Code--> </xsl:when> <xsl:when test="test = b"> <!--Code--> </xsl:when> ... </xsl:choose>Ici, le code ne sert à rien. Il est encore une fois préférable de l'utiliser dans une fonction.
Notez qu'il existe une condition nulle, c'est-à-dire appelée si aucun des cas ne correspond à la valeur d'entrée. Cette balise est :
<xsl:otherwise> <!--Code--> </xsl:otherwise> Les fonctionsEnfin les voilà !
Vous allez voir, c'est très simple. Pour déclarer une fonction, on utilise cette balise :
Alors, ça ne vous rappelle rien ?
Et pour l'appeler, on utilise celle-là :
Dans les deux cas, « nomFonction » désigne le nom de votre fonction (vous pouvez le changer si vous le voulez). Je pense que ça paraît logique, mais il faut toujours déclarer une fonction avant de l'appeler.
Faites attention : call-template n'est pas pareil que apply-templates, ne vous trompez pas ou vous aurez de graves erreurs !
Bon ben on a fini, salut.
Eh attends ! Où sont les paramètres ?
Il vous faut toujours quelque chose !
Bon allez... Je suis sympa.
Il suffit juste de modifier un peu le code de la fonction :
Et pour l'appeller :
Avez-vous besoin d'un coach de formation?
Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.
Comment parser facilement du XML