Je suis le traitement du XML (exemple):XSL court `value-of` avec` disable-output-escaping`?
<?xml version="1.0"?>
<root>& & &</root>
par ce qui suit (exemple) XSL:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0">
<xsl:output
method="html"
version="4.0"
encoding="UTF-8"
omit-xml-declaration="yes"
/>
<xsl:template match="/">
<input value="{/root}" />
</xsl:template>
</xsl:stylesheet>
en utilisant Python et lxml
(libxslt-1.1.17
), et je reçois ce qui suit sortie:
<input value="&amp; &amp; &amp;" />
Je comprends que je peux contourner ce avec le modèle suivant:
<xsl:template match="/">
<input>
<xsl:attribute name="value">
<xsl:value-of
select="/root"
disable-output-escaping="yes"
/>
</xsl:attribute>
</input>
</xsl:template>
mais c'est un lot de taper. Ayant travaillé avec XSL au sein de PHP, je ne me souviens pas avoir jamais eu à utiliser cette solution de contournement pour ne plus citer d'entités XML en utilisant le raccourci value-of
. Y a-t-il une solution à ce problème, alors nous ne devons pas continuer à taper tout ce qui précède?
Je ne peux pas reproduire votre problème. Etes-vous sûr que votre exemple de saisie et feuille de style sont complets et démontrent réellement le problème (au moins la feuille de style ne contient pas la déclaration d'espace de noms «xsl»)? La transcription de la session est disponible ici: http://pastebin.com/rbMhBXRm –
Votre source d'entrée a trois caractères & ampersand, qu'ils sont encodés comme des entités de caractères (comme il se doit). Il n'y a aucun moyen que cela soit produit sous la forme d'un "encodage HTML" comme "& amp;" à moins qu'il ne s'agisse d'entités de caractères en premier lieu mais de cinq caractères "&" comme dans une section CDATA. –