I'm using an XsltCompiledTransform
to transform some XML into a fragment of HTML (not a complete HTML document, just a DIV that I will include in page generated elsewhere).
I'm doing the transformation as follows:
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());
My problem is that the result of the transform always begins with this XML directive:
<?xml version="1.0" encoding="utf-16"?>
How do I prevent this from appearing in my transformed data?
EDIT:
I'm telling the XSLT that I don't want it to output an xml declaration with
<xsl:output method="html" version="4.0" omit-xml-declaration="yes"/>
but this seems to have no effect on the directive appearing in my output.
Interestingly, both my XML data source and my XSLT transform specify themselves as UTF-8
not UTF-16
.
UPDATE:
The UTF-16 seems to be appearing because I'm using a string(builder) as an output mechanism. When I change the code to use a MemoryStream
instead of a StringBuilder
, my UTF-8 encoding is preserved. I'm guessing this has something to do with the internal workings of the string
type and how it deals with encoding.