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 06/09/2007, 12h04   #1
Invité régulier
 
Dev PHP
Inscription : février 2007
Messages : 14
Détails du profil
Informations personnelles :
Âge : 24

Informations professionnelles :
Activité : Dev PHP

Informations forums :
Inscription : février 2007
Messages : 14
Points : 5
Points : 5
Par défaut [XSL] Envoyer du code XSL depuis XML

Bonjour

J'ai un fichier XSL qui met en forme des données XML, et j'aimerais passer du code XSL depuis XML.

En gros je voudrais passer ceci:

Code :
1
2
3
4
5
6
7
8
 
// Variable PHP
$chaine = "<a><xsl:attribute name=\"href\">javascript:void(accueil(\"\",\"\"))</xsl:attribute></a>";
 
// Données XML
<balise1>
     <donnees>".$chaine."</donnees>
</balise1>
J'arrive à le récupérer dans mon fichier XSL avec un <xsl:value-of>, mais il prend ça comme du texte et me l'affiche en "dur".

Y'a t-il une balise spécifique à utiliser, ou bien est-ce impossible ?

Je vous remercie!
t_ferreira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2007, 13h15   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Pourriez-vous détailler comment s'emboite le tout ? Ce que vous utilisez (code), etc ? Parce que l'"exemple" donné fait penser à deux simples chaînes de caractères hors de tout contexte.

julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2007, 13h43   #3
Invité régulier
 
Dev PHP
Inscription : février 2007
Messages : 14
Détails du profil
Informations personnelles :
Âge : 24

Informations professionnelles :
Activité : Dev PHP

Informations forums :
Inscription : février 2007
Messages : 14
Points : 5
Points : 5
Oui bien sûr, j'ai donc un composant métier qui récupère les données d'un article à partir d'une base de données, ainsi que l'arborescence des catégories de l'article, afin de "revenir en arrière".

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 
<?php
 
Header('content-type: text/xml');
include('../include/sql.inc.php');
 
function recuperation()
{
	global $connexion;
	$requete = "SELECT * FROM articles WHERE art_num='".$_REQUEST['artnum']."';";
	$result = pg_query($connexion, $requete);
	$tab = pg_fetch_array($result);
	return $tab;
}
 
function afficher_liens_categories($categorie)
{
    global $connexion;
    $requete="SELECT * FROM CATEGORIES WHERE code_categorie = '$categorie' AND NOT (code_categorie = '_sans_categorie_' OR code_categorie = '_categorie_temp_'  OR  categorie_affichage='0')";
    $result_cat=pg_query($connexion, $requete);
    $chaine = "";
    while ($lcat=pg_fetch_array($result_cat)) {
		$chaine = "<a><xsl:attribute name=\"href\">javascript:void(accueil(\"$lcat[code_categorie]\",\"\",\"\"))</xsl:attribute>" . $lcat["categorie"] . "</a>" . $chaine;
        if ($lcat["categorie_parent"]<>"") {
            $chaine = " > " . $chaine;
            $tmp = "= '" . $lcat["categorie_parent"] . "'";
            $requete="SELECT * FROM CATEGORIES WHERE code_categorie $tmp AND NOT (code_categorie = '_sans_categorie_' OR code_categorie = '_categorie_temp_'  OR  categorie_affichage='0')";
            $result_cat=pg_query($connexion, $requete);
        }
    }
    return $chaine;
}
 
$data = recuperation();
$chaine = afficher_liens_categories($data['categorie']);
 
 
echo("<?xml version=\"1.0\" encoding=\"ISO-8859-15\"?>");
echo("	<!DOCTYPE xml [
		<!ELEMENT article (art_num,art_designation,arborescence)>
		<!ELEMENT art_num (#PCDATA)>
		<!ELEMENT art_designation (#PCDATA)>
		<!ELEMENT arborescence (#PCDATA)>
		] >");
 
echo("	<xml>
			<article>
				<art_num>".$data['art_num']."</art_num>
				<art_designation>".$data['art_designation']."</art_designation>
				<arborescence>".$chaine."</arborescence>
			</article>
		</xml>
	");
 
?>

Je voudrais utiliser le code xsl ($chaine) en retour de la fonction afficher_liens_categories() pour qu'il soit utilisable dans mon xsl (je l'envoie grâce à la balise <arborescence>) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
<?xml version="1.0" encoding="ISO-8859-15" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="article">
<html>
	<head>
		<title></title>
	</head>
	<body>
		<div><xsl:attribute name="align">left</xsl:attribute><xsl:attribute name="class">article</xsl:attribute>
		<xsl:text>&#xA0;Catégorie : </xsl:text><xsl:value-of select="arborescence" />
		</div>
	</body>
</html>
</xsl:template>
</xsl:stylesheet>

En résultat, lorsque je parse le XML, j'obtiens à l'affichage :

Catégorie : <a><xsl:attribute name="href">javascript:void(accueil("CAT1","",""))</xsl:attribute>Categ1</a> > <a><xsl:attribute name="href">javascript:void(accueil("CAT2","",""))</xsl:attribute>Categ2</a> > <a><xsl:attribute name="href">javascript:void(accueil("CAT3","",""))</xsl:attribute>Categ3</a>

Alors que je devrais avoir de beaux liens

Merci.
t_ferreira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2007, 14h21   #4
Invité régulier
 
Dev PHP
Inscription : février 2007
Messages : 14
Détails du profil
Informations personnelles :
Âge : 24

Informations professionnelles :
Activité : Dev PHP

Informations forums :
Inscription : février 2007
Messages : 14
Points : 5
Points : 5
Entre temps j'ai réussi à contourner le problème, pour ceux qui seraient intéréssés.

J'ai réussi à faire passer mon code HTML "$chaine" en remplaçant, dans les données XML ceci :
Code :
<arborescence>".$chaine."</arborescence>
En cela :
Code :
<arborescence><![CDATA[$chaine]]></arborescence>
Dans mon fichier XSL, j'ai du utiliser le "disable-output-escaping" afin qu'il ne me vire pas mes balises HTML.
Code :
<xsl:value-of disable-output-escaping="yes" select="arborescence" />
Et j'ai dû également changer mes guillemets doubles par des simples dans mes "href" (pour que tout soit compris par FireFox).
t_ferreira 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 14h41.


 
 
 
 
Partenaires

Hébergement Web