Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > XSL & XSLT
XSL & XSLT Forum d'entraide pour les extensions XSL et XSLT permettant de manipuler vos documents XML à l'aide de feuilles de style et de transformations avec PHP. Avant de poster -> tutoriels XSL et XSLT
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/07/2005, 14h28   #1
Invité de passage
 
Inscription : juillet 2005
Messages : 4
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 4
Points : 2
Points : 2
Par défaut [XSL] parser fichier xml : erreurs + incompréhensions

Bonjour à tous

Je voulais faire d'un fichier xml un fichier html avec un passage par un fichier xsl.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet type="text/xsl" href="essais.xslt"?>
<recette>
 
	<entete>
		<auteur id="1">Casimir</auteur>
		<titre>Recette du Gloubi-Boulga</titre>
		<remarque>Pour une personne</remarque>
	</entete>
 
	<procedure>
		Remplir un saladier <BOLD>avec de la confiture de fraises</BOLD>, du chocolat râpé,
		des bananes écrasées, de la moutarde forte, des saucisses de Toulouse
		écrasées tièdes mais crues. Mélanger vigoureusement jusqu'à obtenir une
		bouillie marron-clair. Il est normal qu'il y ait des grumeaux. Les
		proportions sont environ égales pour tous les ingrédients, mais il est
		possible de varier selon les goûts de chacun. 	
	</procedure>
 
</recette>
Grâce à Virgul je sais maintenant que cela n'est pas suffisant, car IE interprète directement le xml. Je me suis dirigé alors vers l'aide php au rayon expat et fonctionnalités xml pour php où j'ai trouvé ce fichier exemple pour formuler une structure de document xml.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
$file = "donnees.xml";
$depth = array();
 
function debutElement($parser, $name, $attrs) 
{
    global $depth;
    for ($i = 0; $i < $depth[$parser]; $i++) {
        echo "  ";
    }
    echo "$name\n";
    $depth[$parser]++;
}
 
function finElement($parser, $name) 
{
    global $depth;
    $depth[$parser]--;
}
 
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "debutElement", "finElement");
if (!($fp = fopen($file, "r"))) {
    die("Impossible d'ouvrir le fichier XML");
}
 
while ($data = fread($fp, 4096)) {
    if (!xml_parse($xml_parser, $data, feof($fp))) {
        die(sprintf("erreur XML : %s à la ligne %d",
                    xml_error_string(xml_get_error_code($xml_parser)),
                    xml_get_current_line_number($xml_parser)));
    }
}
xml_parser_free($xml_parser);
?>
MAIS : il semble que quelque chose ne plait pas qui m'affiche cette erreur :
"Notice: Undefined offset: 2 in c:\program files\easyphp1-8\www\edition\debut.php on line 12" et le même pour la ligne 18


Je pense qu'il n'arrive pas à trouver une valeur qque part. j'ai essayé d'initialiser les variables des fonctions sans résultat.

Question 1 : qui peut me dire de quoi vient cett p...... d'erreur ???

Puis j'ai essayé d'ajouter le code juste après l'écho du $name croyant qu'il allait afficher le nom de l'attribut d'une des balises xml ?!
A la place dans le résultat j'ai "Array" qui s'affiche suite à tous les noms de balises.

Question 2 : Comment il sait que $name c'est le nom de la balise et qu'il ne sait pas que $attrs est le nom de l'attribut. Ou alors j'ai tout faux quand je crois que $attrs = attribut. Ou alors le code manque d'arguments ???

Merci de votre aide....
totobouchon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2005, 15h47   #2
Invité de passage
 
Inscription : juillet 2005
Messages : 4
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 4
Points : 2
Points : 2
Re-bonjour à tous,

Pour ce qui est de l'erreur "Undefined offset: 2 " c'était le tableau "$depth" qui n'était pas instancié donc en ajoutant une conditionnelle et une valeur à l'indexe "$parser" tel que ci dessous :
Code :
1
2
3
4
 
global $depth;
if(empty($depth[$parser])) $depth[$parser]=0;
for ($i = 0; $i < $depth[$parser]; $i++) {
on évite d'avoir le premier "tour" de boucle sans valeur.

Pour ce qui est de la question deux, après avoir bien lu, ce sont des valeurs propres à la méthode "xml_set_element_handler".

Merci et bonne journée, Toto...
totobouchon est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h21.


 
 
 
 
Partenaires

Hébergement Web