2012-10-10 5 views
0

J'ai défini une variable XSLT "description" avec un espace de noms "meta_words" dans une balise HTML meta description.Comment mettre un tag XSLT dans un attribut HTML?

Avez-vous la solution?

Voici le mauvais code

<meta name="description" content="<xsl:value-of match="meta_words" select="$description" />" /> 
+0

Échapper le contenu de l'attribut ou il ne sera pas valide. –

+0

L'attribut 'match' n'est pas valide sur xsl: value-of. Pouvez-vous montrer exactement à quoi correspond votre variable 'description', pour le rendre plus clair? Merci! –

+0

Il a traversé PHP comme ceci 'XSLTProcessor :: setParameter ('meta_words', 'description', 'Ma description méta, ....');' – user938609

Répondre

3

Voici le mauvais code

<meta name="description" content="<xsl:value-of match="meta_words" select="$description" />" /> 

En effet, cela est faux. L'instruction xsl:value-of n'a pas d'attribut match - donc vous ne savez pas exactement ce que vous voulez faire et à quoi le résultat devrait ressembler.

Voici ce que je veux que vous voulez.

Utilisation:

<meta name="description" content="{$description}"/> 

Mise à jour:

D'un commentaire fait par l'OP, il semble qu'il y ait un paramètre nommé $meta_words:description - pas un param/variable nommée $description.

Dans ce cas, la solution ci-dessus doit être modifiée pour:

<meta name="description" content="{$meta_words:description}"/> 

et la définition d'espace de nom correct pour le préfixe "meta_words" doit être portée (on met habituellement de telles définitions d'espace de noms sur l'élément xsl:stylesheet).

Voici une transformation complète:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:meta_words="some:meta_words" exclude-result-prefixes="meta_words"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:param name="meta_words:description" select="'XYZ'"/> 

<xsl:template match="/"> 
    <meta name="description" content="{$meta_words:description}"/> 
</xsl:template> 
</xsl:stylesheet> 

Lorsque cette transformation est appliquée sur tout document XML (non utilisé pour cette démonstration), le résultat voulu, correct produit:

<meta name="description" content="XYZ"/> 
+0

Oui, mais où puis-je mettre l'espace de noms – user938609

+1

Quel espace de noms? La question sous sa forme actuelle ne montre pas le résultat souhaité du tout - donc nous ne pouvons pas deviner quels espaces de noms, le cas échéant, sont voulus être générés. S'il vous plaît, * modifier * la question et fournir toutes les informations manquantes et importantes. –

+0

Si vous voulez accéder à un paramètre dans l'espace de nommage 'meta_words', utilisez alors' xmlns: metaw = "meta_words" 'sur l'élément' xsl: stylesheet' et utilisez ensuite ' dans le modèle de valeur d'attribut. –

Questions connexes