Cela peut être une question très simple, mais c'est une question que je n'arrive pas à comprendre et qui m'arrache les cheveux. J'ai le code XML suivant:XSL et Namespaces
<?xml-stylesheet type="text/xsl" href="email.xsl"?>
<Example xmlns="">
<Name xmlns="urn:rnb.fulfilment.bus.contracts.public.exampleBookName.v1">Mark</Name>
</Example>
Et essaie d'utiliser la XSLT suivante:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:template match="/">
<html>
<body>
<table width="90%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<p>AUTOMATED CONFIRMATION: This confirmation email is unable to take replies. For further assistance please visit our Help pages or Contact us</p>
<p>Dear <xsl:value-of select="Name"/>,</p>
<p>Thank you for blah blah... </p>
</td>
</tr>
</table>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Je ne peux pas obtenir le nom à apparaître quand je suis en utilisant le xmlns=urn:rnb.fulfilment.bus.contracts.public.exampleBookName.v1
dans le flux XML, lorsque je retire le xmlns
, le nom s'affiche très bien.
Y a-t-il une syntaxe qui me manque? Je l'ai essayé d'ajouter l'espace de noms à l'élément <xsl:stylesheet>
:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rpg="urn:rnb.fulfilment.bus.contracts.public.exampleBookName.v1"
>
Ensuite, en utilisant le préfixe j'ai donné au XSLT dans l'expression XPath:
<xsl:value-of select="Name"/>
Mais cela ne fonctionne pas non plus. Quelqu'un peut-il aider? Merci d'avance.
C'est une mauvaise idée, car elle n'est pas seulement inefficace (lent à cause de la comparaison de chaînes) mais ne tient pas compte des espaces de noms, ce qu'elle devrait faire. – Lucero
... Si les espaces de noms sont pertinents (si un comportement différent est souhaité pour différents espaces de noms). Si le XSL ne fait que formater le contenu du XML brut qui vous intéresse, alors l'espace de noms n'est pas si pertinent et peut être ignoré. Dans l'exemple OP, l'espace de nom n'est * pas * destiné à être conservé dans le fichier XML de sortie, seul le contenu textuel de l'élément est. Je ne suis pas sûr de la performance. Rappelez-vous que selon les définitions de la fonction XPath "* [name() = name]" est équivalent à "name"; et de toute façon un compilateur est libre de 'réécrire 'les expressions XPath à des expressions équivalentes dans le but d'optimiser. – user268396
+1 Ce n'est pas une mauvaise ou une mauvaise réponse qui mérite un score négatif. Cela a certaines implications, mais elles ont été nommées. L'argument performance dépend fortement du nombre d'enfants du nœud actuel et de l'optimisation du processeur XSLT.L'argument namespace dépend fortement de si vous vous en souciez ou non. ;) – Tomalak