【问题标题】:Leading illegal characters after XSLT transformationXSLT 转换后的前导非法字符
【发布时间】:2012-09-25 06:45:17
【问题描述】:

在 XSLT 转换后,我不断收到前导问号,这些问号(似乎)与字符编码有关,但我无法摆脱它们。我尝试了所有不同的编码,但没有帮助。当我序列化对象时,我被内存中的 xml 源卡住了。

这是我的代码(尽可能简短地重现问题)

var xd = new XmlDocument();
xd.LoadXml(@"<?xml version=""1.0"" encoding=""utf-8""?><Test><AAA>AAA</AAA></Test>");

var xslt = new System.Xml.Xsl.XslCompiledTransform();
xslt.Load(Server.MapPath("/Transformations/Test.xslt"));

using (var ms = new MemoryStream())
{
    xslt.Transform(xd, null, ms);
    ms.Position = 1;

    using (var sr = new StreamReader(ms, System.Text.Encoding.UTF8, true))
    {
        string s = sr.ReadToEnd();
    }
}

这就是 XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
    <xsl:output method="text"  indent="no"/>
    <xsl:template match="Test">
        BBB<xsl:value-of select="AAA" />CCC
    </xsl:template>
</xsl:stylesheet>

生产:

��\r\n\t\tBBBAAACCC\r\n\t

这可能很简单,但我想不通......

问候,

赫拉斯

【问题讨论】:

  • 可能是字节顺序标记 (BOM),用于提示保存编码文本文件。 (Visual Studio 默认将其大部分文本文件,如 .cs 保存为带有 BOM 的 UTF-8。)See also here

标签: c# asp.net xslt


【解决方案1】:

ms.Position 设置为 0 而不是 1

C# 数组是零索引的。

【讨论】:

  • 虽然流由数组支持,但这是一个实现细节。我宁愿说Stream.Position 是从零开始的。
  • 我现在觉得很傻。这解决了它...我非常专注于字符编码,以至于我没有注意到...谢谢!!!
猜你喜欢
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
  • 2014-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
相关资源
最近更新 更多