c# - 从 XslCompiledTransform.Transform 输出中排除 XML 指令

标签 c# xml xslt xslcompiledtransform

我正在使用 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 类型的内部工作方式以及它如何处理编码有关。

最佳答案

您需要使用 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());
}

关于c# - 从 XslCompiledTransform.Transform 输出中排除 XML 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1739759/

相关文章:

XSLT-XPath : For-each path specification for re-grouping of elements

c# - UWP Application Insights 没有崩溃的调用堆栈

c# - 如何安全地实现从Windows服务到公共(public)WebApi的 Multi-Tenancy 访问

c# - 以特定模式格式化日期字符串

c# - 在 Azure Functions v2 中添加中间件等

c# - LINQ2XML 将所有 namespace 声明移动到根元素

c# - 将 XML 写入网页

ruby - XPath 选择 OOXML 中两个文本标记之间的所有节点?

xml - 如何将文字和变量放入标签中?

html - 客户端 XSLT 的当前状态