Исключить директиву XML из вывода XslCompiledTransform.Transform

StackOverflow https://stackoverflow.com/questions/1739759

Вопрос

я использую 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.

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

Это было полезно?

Решение

Вам нужно использовать 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());
}

Другие советы

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

<xsl:output 
    method="html" 
    omit-xml-declaration="yes"/>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top