Question

J'utilise un XsltCompiledTransform pour transformer du XML en un fragment de HTML (et non un document HTML complet, juste un DIV que je vais inclure dans la page générée ailleurs).

Je fais la transformation comme suit:

StringBuilder output = new StringBuilder();

XmlReader rawData = BusinessObject.GetXml();
XmlWriter transformedData = XmlWriter.Create(output);

XslCompiledTransform transform = new XslCompiledTransform();

transform.Load("stylesheet.xslt");

transform.Transform(rawData, transformedData);

Response.Write(output.ToString());

Mon problème est que le résultat de la transformation commence toujours par cette directive XML:

<?xml version="1.0" encoding="utf-16"?>

Comment empêcher cela d'apparaître dans mes données transformées?

EDIT:

Je dis la XSLT que je ne veux pas qu'il produire une déclaration xml avec

<xsl:output method="html" version="4.0" omit-xml-declaration="yes"/>

mais cela semble avoir aucun effet sur la directive apparaissant dans ma sortie.

Il est intéressant, à la fois ma source de données XML et ma transformation XSLT se PRÉCISE UTF-8 pas UTF-16.

Mise à jour: L'UTF-16 semble apparaître parce que je suis en utilisant une chaîne (constructeur) en tant que mécanisme de sortie. Quand je change le code d'utiliser un MemoryStream au lieu d'un StringBuilder, mon encodage UTF-8 est préservée. Je devine que cela a quelque chose à voir avec le fonctionnement interne du type string et la façon dont il traite le codage.

Était-ce utile?

La solution

Vous devez utiliser un objet XmlWriterSettings. Définissez ses propriétés d'omettre la déclaration XML, et le transmettre au constructeur de votre XmlWriter.

StringBuilder output = new StringBuilder();
XmlReader rawData = BusinessObject.GetXml();

XmlWriterSettings writerSettings = new XmlWriterSettings();
writerSettings.OmitXmlDeclaration = true;

using (XmlWriter transformedData = XmlWriter.Create(output, writerSettings))
{
  XslCompiledTransform transform = new XslCompiledTransform();
  transform.Load("stylesheet.xslt");
  transform.Transform(data, transformedData);
  Response.Write(output.ToString());
}

Autres conseils

La façon la plus simple serait d'ajouter ce nœud à votre XSLT:

<xsl:output 
    method="html" 
    omit-xml-declaration="yes"/>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top