Bonjour,

Je veux transformer un xml "simple" en un xml "compliqué" (openxml spreadsheet)
EN gros je veux coller

      <?xml version="1.0"?>
      <?mso-application progid="Excel.Sheet"?>
      <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
       xmlns:o="urn:schemas-microsoft-com:office:office"
       xmlns:x="urn:schemas-microsoft-com:office:excel"
       xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
       xmlns:html="http://www.w3.org/TR/REC-html40">
        <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
          <Author>toto</Author>
          <LastAuthor>toto</LastAuthor>
          <Created>2011-01-12T13:22:56Z</Created>
          <Version>12.00</Version>
        </DocumentProperties>...
désigné ci après bloc_ouvrant
et
</Workbook>
désigné ci après bloc_fermant

autour d'un apply-templates.

J'ai protégé les 2 blocs par du cdata les balises n'étant pas bien balancées. Et je comptais simplement écrire les blocs autour de mon traitement pour récupérer un cml valide. Mais cela ne focntionne pas.

avec une output xml tous les < de mon prologue deviennent des &lt;
avec une output text ce sont les balises de mon apply-templates qui disparaissent.

Une idée ?
Bonjour Vince,

Comme souvent avec ce type de question, une petite recherche dans la référence, et hop, c’est trouvé! Smiley cligne

La référence : XSLT 1.0 Reference [W3C]

La réponse est ici : XSLT / 16.4 Disabling Output Escaping

a écrit :
Normally, the xml output method escapes & and < (and possibly other characters) when outputting text nodes. This ensures that the output is well-formed XML. However, it is sometimes convenient to be able to produce output that is almost, but not quite well-formed XML; for example, the output may include ill-formed sections which are intended to be transformed into well-formed XML by a subsequent non-XML aware process. For this reason, XSLT provides a mechanism for disabling output escaping. An xsl:value-of or xsl:text element may have a disable-output-escaping attribute; the allowed values are yes or no; the default is no; if the value is yes, then a text node generated by instantiating the xsl:value-of or xsl:text element should be output without any escaping. For example,
<xsl:text disable-output-escaping="yes">&lt;</xsl:text>

should generate the single character <.

[…]


Si tu as des difficultés avec l’anglais, alors c’est différent. Dans ce cas demande, et je te le traduit (il faudra que je cherche la référence en français, je crois qu’elle existe).

Pour résumé sinon, tu peux le faire avec un élément xsl:text (si c’est inclu directement dans le source XSLT) ou avec un élément xsl:value-of (si ton texte doit être le résultat de l’évaluation d’une expression stockée dans une « variable »), auquel tu aura donné l’attribut disable-output-escaping="yes"


P.S. Je consulte personnellement la référence sous forme d’un fichier d’aide Windows (CHM), comme toutes les références que j’utilise. Si ça t’intéresse, demande, et je la met en téléchargement (je posterai un lien ici).
Modifié par hibou57 (16 Jan 2011 - 06:58)