kri*_*ian 6 c# xml xslt xslcompiledtransform
我正在使用一个XsltCompiledTransform
XML将一些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());
Run Code Online (Sandbox Code Playgroud)
我的问题是转换的结果总是从这个XML指令开始:
<?xml version="1.0" encoding="utf-16"?>
Run Code Online (Sandbox Code Playgroud)
如何防止这种情况出现在我的转化数据中?
编辑:
我告诉XSLT我不希望它输出一个xml声明
<xsl:output method="html" version="4.0" omit-xml-declaration="yes"/>
Run Code Online (Sandbox Code Playgroud)
但这似乎对我的输出中出现的指令没有影响.
有趣的是,我的XML数据源和我的XSLT转换都指定自己UTF-8
不是UTF-16
.
更新:
UTF-16似乎正在出现,因为我使用字符串(构建器)作为输出机制.当我将代码更改为使用MemoryStream
而不是a时StringBuilder
,我的UTF-8编码将被保留.我猜这与该string
类型的内部工作方式以及它如何处理编码有关.
kri*_*ian 14
你需要使用一个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());
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5409 次 |
最近记录: |