Des livres incontournables pour tout maîtriser

  • CSS2
  • Réussir son site web avec XHTML et CSS
  • PHP 5 avancé
  • Memento CSS
  • Memento XHTML
  • Ergonomie web
  • Bien rédiger pour le web
Auteur
Dark$hadow
# 04 May 2009 - 00:42:40
Citer
58 Posts
Bonsoir à tous!!

Je viens de découvrir le xslt que j'ai mis en place grâce à l'objet XSLTProcessor de PHP.

Tout se passe à merveille, sauf qu'un petit obstacle me freine:

Dans ma feuille xsl j'appelle une fonction php pour laquelle je souhaite passer un paramètre moitié dynamique, moitié fixe (concaténer quoi), mais il semblerait que le parser soit pas d'accord avec mon " 'creations/'@id "...(le tout en couleurs juste au dessous biggrin )



<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:php="http://php.net/xsl"
version="1.0">

<xsl:output
indent="yes"
method="xml"
omit-xml-declaration="yes"
encoding="UTF-8"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>

<!-- Affichage simple -->
<xsl:template match="/root">

<h2>Mes réalisations</h2>

<ul id="realisations">
<xsl:for-each select="project">
<li>
<a>
<xsl:attribute name="href">
<xsl:value-of select="php:functionString('site_url', 'creations/'@id)" />
</xsl:attribute>

<xsl:value-of select="name"/>
</a> : <xsl:value-of select="description"/></li>

</xsl:for-each>
</ul>

</xsl:template>

</xsl:stylesheet>


De plus, dans ma page xHTML finale, les préfixes de namespace apparaissent, tout comme le doctype (ce que j'aimerais bien entendu omettre):


<!DOCTYPE h2 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<h2 xmlns:php="http://php.net/xsl">Mes réalisations</h2><ul xmlns:php="http://php.net/xsl" id="realisations">
<li><a href="http://www.monSite.fr/blablabla">blablabla</a> : blablabla</li>
</ul>


Merci pour l'aide que vous pourrez m'apporter smile

[EDIT] Je viens de trouver pour les paramètres de la fonction:

il faut utiliser la syntaxe: "<xsl:value-of select="php:functionString('site_url', concat('creations/'@id))" />

Reste à trouver pour l'intégration dans un page xHTML sans avoir le doctype et le préfixes namespace...
Modifié par Dark$hadow (04 May 2009 - 11:13)

http://www.pierrefevrier.fr 
^
hibou57
# 06 May 2009 - 14:07:48
Citer
207 Posts
Bonjour monsieur l'Alien,

Dark$hadow a écrit :
[...]

De plus, dans ma page xHTML finale, les préfixes de namespace apparaissent, tout comme le doctype (ce que j'aimerais bien entendu omettre):


<!DOCTYPE h2 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<h2 xmlns:php="http://php.net/xsl">Mes réalisations</h2><ul xmlns:php="http://php.net/xsl" id="realisations">
<li><a href="http://www.monSite.fr/blablabla">blablabla</a> : blablabla</li>
</ul>


Merci pour l'aide que vous pourrez m'apporter smile

[...]


C'est trés bien, tu as utilisé l'élément xsl:output à bon escient.

Mais il est possible d'y ajouter encore un attribut qui pourrait peut-être résoudre la question du DOCTYPE, ce serait d'ajouter à l'élément xsl:output, l'attribut media-type (xsl:output - w3c/TR/XSLT)

Je n'utilise jamais XHTML, mais je sais qu'il existe avec lui quelques bizzareries, comme par exemple la quasi-obligation de l'omission de la déclaration XML. Peut-être qu'en ajoutant un attribut media-type, le document en sortie serat-il mieux traité par le processeur XSLT (s'il y prête attention). Quelques spécifications MIME Type recommandées sont présentées ici : XHTML Media Types - Second Edition.

Pour le prefix d'espace de nom php:, as-tu essayé de lui substituer l'espace de nom par défaut ? Tu peux en faire l'espace de nom par défaut en écrivant

xmlns="http://php.net/xsl"

au lieu de
xmlns:php="http://php.net/xsl"


Bon courage biggrin
Modifié par hibou57 (06 May 2009 - 14:14)

Appelez moi « Chou Hibou Cailloux »

http://www.les-ziboux.rasama.org/clavier-arabe-virtuel.html 
^
Dark$hadow
# 06 May 2009 - 15:36:56
Citer
58 Posts
Merci pour ta réponse.

J'ai oublié de revenir mettre ma solution (parce que oui j'ai trouvé smile ):


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:var="http://www.w3.org/TR/xhtml1/strict"
xmlns:php="http://php.net/xsl"
exclude-result-prefixes="xsl var php">

<xsl:output
indent="yes"
method="html"
omit-xml-declaration="yes"
encoding="UTF-8"/>

<xsl:template match="/root">

<h2>Mes réalisations</h2>

<ul id="realisations">
<xsl:for-each select="project">
<li>
<!-- Ajout d'un margin-bottom pour éviter un bug IE -->
<xsl:if test="position() = last()">
<xsl:attribute name="style">margin-bottom: 0px</xsl:attribute>
</xsl:if>
<a>
<xsl:attribute name="href">
<xsl:value-of select="php:functionString('site_url', concat('creations/', @id))" />
</xsl:attribute>

<xsl:value-of select="name"/>
</a> : <xsl:value-of select="description"/>
</li>

</xsl:for-each>
</ul>

</xsl:template>

</xsl:stylesheet>


Donc j'ai réussi à supprimer toutes les déclarations avec ces éléments:


exclude-result-prefixes="xsl var php"
omit-xml-declaration="yes"


En espérant que ça puisse servir à d'autres dans la même situation ravi

http://www.pierrefevrier.fr 
^
hibou57
# 06 May 2009 - 20:38:40
Citer
207 Posts
Dark$hadow a écrit :
[...]


exclude-result-prefixes="xsl var php"
omit-xml-declaration="yes"


En espérant que ça puisse servir à d'autres dans la même situation ravi

Instructif, merci smile

Appelez moi « Chou Hibou Cailloux »

http://www.les-ziboux.rasama.org/clavier-arabe-virtuel.html 
^
Powered by Phedio v3.8.6 beta in 7.8 ms © dew