排除来自XslCompiledTransform.Transform输出XML指令
-
20-09-2019 - |
题
我使用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"?>
如何防止这种情况出现在我的转换后的数据?
修改强>
我要告诉我不希望它的输出以XML声明的XSLT
<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());
}
其他提示
最简单的方法将这个节点添加到您的XSLT:
<xsl:output
method="html"
omit-xml-declaration="yes"/>
不隶属于 StackOverflow