Исключить директиву XML из выходных данных XslCompiledTransform.Transform - PullRequest
6 голосов
/ 16 ноября 2009

Я использую XsltCompiledTransform для преобразования некоторого XML в фрагмент HTML (не полный документ HTML, просто DIV, который я включу в страницу, созданную в другом месте).

Я выполняю преобразование следующим образом:

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());

Моя проблема в том, что результат преобразования всегда начинается с этой директивы XML:

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

Как мне предотвратить появление этого в моих преобразованных данных?

РЕДАКТИРОВАТЬ:

Я говорю XSLT, что не хочу, чтобы он выводил объявление xml с

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

но это, похоже, не влияет на директиву, появляющуюся в моем выводе.

Интересно, что и мой источник данных XML, и мое XSLT-преобразование указывают себя как UTF-8, а не UTF-16.

UPDATE: UTF-16, кажется, появляется, потому что я использую строку (строитель) в качестве механизма вывода. Когда я изменяю код для использования MemoryStream вместо StringBuilder, моя кодировка UTF-8 сохраняется. Я предполагаю, что это как-то связано с внутренней работой типа string и с тем, как она работает с кодированием.

Ответы [ 2 ]

14 голосов
/ 16 ноября 2009

Вам необходимо использовать XmlWriterSettings объект. Установите его свойства, чтобы пропустить объявление XML, и передайте его конструктору вашего 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());
}
3 голосов
/ 16 ноября 2009

Самый простой способ - добавить этот узел в XSLT:

<xsl:output 
    method="html" 
    omit-xml-declaration="yes"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...