我的代码在我的XSLT输出XML的最开头输出一些奇怪的字符,并且Visual Studio 2008或记事本都没有显示它。但它肯定存在,因为VS让我删除它,然后将正确地自动格式化XML。我怎么阻止这个?这是我的代码:
// create the readers for the xml and xsl
XmlReader reader = XmlReader.Create(
new StringReader(LoadFileAsString(MapPath(xslPath)))
);
XmlReader input = XmlReader.Create(
new StringReader(LoadFileAsString(MapPath(xmlPath)))
);
// create the xsl transformer
XslCompiledTransform t = new XslCompiledTransform(true);
t.Load(reader);
// create the writer which will output the transformed xml
StringBuilder sb = new StringBuilder();
//XmlWriterSettings tt = new XmlWriterSettings();
//tt.Encoding = Encoding.Unicode;
XmlWriter results = XmlWriter.Create(new StringWriter(sb));//, tt);
// write the transformed xml out to a stringbuilder
t.Transform(input, null, results);
// return the transformed xml
WriteStringAsFile(MapPath(outputXmlPath), sb.ToString());
public static string LoadFileAsString(string fullpathtofile)
{
string a = null;
using (var sr = new StreamReader(fullpathtofile))
a = sr.ReadToEnd();
return a;
}
public static void WriteStringAsFile(string fullpathtofile, string content)
{
File.WriteAllText(fullpathtofile, content.Trim(), Encoding.Unicode);
}
答案 0 :(得分:4)
XML输出文档开头的内容很可能是 byte-order-mark 或 BOM ,它指示Unicode输出中的字节是否在big-endian或little-endian order。
此BOM可能对XML文档的使用者有用;但是,在某些情况下,它可能会导致问题,然后最好不要创建它。
您可以指定是否使用Encoding
指定的XmlWriterSettings
创建BOM:
XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
xmlWriterSettings.Encoding = new UTF8Encoding(false);
上面的代码将使用UTF8编码创建您的文档。这很可能是您想要的,除非您的消费系统明确要求UTF16 / Unicode编码或您正在处理亚洲字符。
要创建UTF16 / Unicode编码文档,请使用UnicodeEncoding
并将第二个参数设置为false
:
XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
xmlWriterSettings.Encoding = new UnicodeEncoding(false, false);