Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

PARSER UN FICHIER XML AVEC DOMXML ET LE METTRE EN FORME AVEC XSLT


Information sur la source

Catégorie :Xml Niveau : Débutant Date de création : 25/01/2004 Date de mise à jour : 06/03/2004 12:19:40 Vu : 21 486

Note :
8 / 10 - par 2 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

Description

Ce code va vous permettre :

- parser un fichier xml
- mettre en forme le fichier xml avec xslt

L'extension utilisé est DomXml/DomXslt.
Un bout d'application est présenté ici, un carnet d'adresse.

Le fichier carnet.xml contient les données du carnet d'adresse.
Le fichier carnet.xsl permet la mise en forme des données xml.
Le fichier carnet.php permet de parser et de mettre en forme le fichier xml dynamiquement via php.
 

Source

  • - carnet.xml :
  • <?xml version="1.0" encoding="ISO-8859-1"?>
  • <carnet>
  • <personne>
  • <nom>DUPONT</nom>
  • <prenom>Pierre</prenom>
  • <age>17</age>
  • </personne>
  • <personne>
  • <nom>DUPONT</nom>
  • <prenom>Jacky</prenom>
  • <age>46</age>
  • </personne>
  • <personne>
  • <nom>DUPONT</nom>
  • <prenom>René</prenom>
  • <age>23</age>
  • </personne>
  • </carnet>
  • - carnet.xsl :
  • <?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" indent="no"/>
  • <xsl:template match="/">
  • <html>
  • <head>
  • <meta name="author" content="orion"/>
  • <style type="text/css">
  • .bg-0 { background-color: #efefff; }
  • .bg-1 { background-color: #efffef; }
  • </style>
  • </head>
  • <body bgcolor="white" text="black">
  • <table><xsl:apply-templates match="carnet"/></table>
  • </body>
  • </html>
  • </xsl:template>
  • <xsl:template match="carnet">
  • <xsl:for-each select="personne">
  • <tr class="bg-{position() mod 2}">
  • <td>Nom: <xsl:value-of select="nom"/></td>
  • <td>Prenom: <xsl:value-of select="prenom"/></td>
  • <td>Age: <xsl:value-of select="age"/> ans</td>
  • </tr>
  • </xsl:for-each>
  • </xsl:template>
  • </xsl:stylesheet>
  • - carnet.php :
  • <?php
  • $xml = domxml_open_file('carnet.xml');
  • $xsl = domxml_xslt_stylesheet_file('carnet.xsl');
  • $html = $xsl->process($xml);
  • echo $html->dump_mem();
  • ?>
- carnet.xml :

<?xml version="1.0" encoding="ISO-8859-1"?>
<carnet>
	<personne>
		<nom>DUPONT</nom>
		<prenom>Pierre</prenom>
		<age>17</age>
	</personne>
	<personne>
		<nom>DUPONT</nom>
		<prenom>Jacky</prenom>
		<age>46</age>
	</personne>
	<personne>
		<nom>DUPONT</nom>
		<prenom>René</prenom>
		<age>23</age>
	</personne>
</carnet>

- carnet.xsl :

<?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" indent="no"/>
<xsl:template match="/">
	<html>
		<head>
			<meta name="author" content="orion"/>
			<style type="text/css">
			.bg-0 { background-color: #efefff; }
			.bg-1 { background-color: #efffef; }
			</style>
		</head>
		<body bgcolor="white" text="black">
		<table><xsl:apply-templates match="carnet"/></table>
		</body>
	</html>
</xsl:template>

<xsl:template match="carnet">
	<xsl:for-each select="personne">
		<tr class="bg-{position() mod 2}">
			<td>Nom: <xsl:value-of select="nom"/></td>
			<td>Prenom: <xsl:value-of select="prenom"/></td>
			<td>Age: <xsl:value-of select="age"/> ans</td>
		</tr>
	</xsl:for-each>
</xsl:template>
</xsl:stylesheet>


- carnet.php :

<?php
$xml = domxml_open_file('carnet.xml');
$xsl = domxml_xslt_stylesheet_file('carnet.xsl');
$html = $xsl->process($xml);
echo $html->dump_mem();
?>

Conclusion

Bon courage.
 

Commentaires et avis

signaler à un administrateur
Commentaire de fabrice_pi le 01/05/2004 21:06:51

Salut orion,

c'est une bonne source ! Je n'ai pas tout regardé mais est-ce que la transformation peut se faire à la volet coté seveur ? je cherche à faire ça en ce moment. J'utilise sablotron pour faire cette transformation. Malheureusement sablotron formate la sortie en html :-( et moi je veux du xhtml !
j'ai trouvé qu'il fallait mettre la variable XSLT_SABOPT_DISABLE_ADDING_META de sablotron à true. mais je ne sais pas comment faire ! Est-ce que tu as une idée ?

Fabrice

signaler à un administrateur
Commentaire de OriOn le 03/05/2004 13:28:05 administrateur CS

Je te déconseille vraiment l'utilisation de Sablotron. Beaucoup trop lent puis.... c'est pas ce qu'il se fait de mieux. Pour ce qui est de la sortie  c'est à toi d'écrire du code xhtml dans ton fichier xslt. Si tu regardes mon exemple, j'utilise DomXml/DomXslt. Tu sais ce qu'il te reste à faire ;-)

signaler à un administrateur
Commentaire de fabrice_pi le 03/05/2004 21:12:47

pour sablotron, je débute alors j'ai pris le premier venu, pour l'optimisation j'aurais vu plus tard... Je vais me renseigner sur DomXml/DomXslt.
Sinon j'écris bien du xhtml dans mon fichier xslt. Le problème c'est que sablotron ajoute une ligne meta content-type: text/html ce que je ne veux pas ! Donc je vais vraiment me renseigner sur DOM.
Fabrice

signaler à un administrateur
Commentaire de fabrice_pi le 08/05/2004 11:36:02

Salut,

ça y est ! je m'y suis mis !

Je me permets juste d'apporter 2 petites corrections à ton fichier carnet.php :
- La première permet de rendre le scripte php portable aafin qu'il fonctionne sur un serveur linux et windows
- La deuxième consiste simplement à décoder la page XML qui est en unicode alors que les pages html sont en ascii.

Voici le code (carnet.php) :

&lt;?php
$path = $_SERVER['SCRIPT_FILENAME'];
$path = substr($path,0,strrpos($path, '/')+1);

$xml = domxml_open_file($path . 'carnet.xml');
$xsl = domxml_xslt_stylesheet_file($path . 'carnet.xsl');
$html = $xsl-&gt;process($xml);
echo utf8_decode($html-&gt;dump_mem());
?&gt;

Fabrice

signaler à un administrateur
Commentaire de PaTaTe le 04/07/2006 21:09:06

J'ai une opération non conforme sur php4ts.dll quand j'essaie d'accéder à mon XML avec ce code

Quelqu'un sait pourquoi ?

signaler à un administrateur
Commentaire de juki_webmaster le 21/07/2006 19:25:12

PaTaTe : Si sa crash, remet à jour ton php: http://snaps.php.net/
Et si sa crash encore une fois, fait un rapport de bugs sur http://bugs.php.net/

signaler à un administrateur
Commentaire de boussi_85 le 10/11/2006 12:37:43

j ai besoin d effectuer la supression et la mise a jour avec des check box.
using DOM , XML et php

merci :)

signaler à un administrateur
Commentaire de cutch le 20/01/2007 13:41:58

Salut
J'utilise easyphp1.8, mais il me met une erreur
"Fatal error: Call to undefined function: domxml_open_file()"
j'ai aussi tester avec Wamp5 et tjrs la meme erreur
Qu'est ce que je peut faire pour que ca fonctionnne ?
merci

signaler à un administrateur
Commentaire de Pierro246 le 06/03/2007 21:14:53

Faut que tu installe le module domxml :) regarde dans le menu d'easyphp ;)

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.