begin process at 2008 07 21 00:29:52
1 213 530 membres
431 nouveaux aujourd'hui
14 167 membres club

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 : 19 204

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.
  • 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

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS