0

在 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

这可能很简单,但我无法弄清楚......

问候,

赫拉斯

4

1 回答 1

4

将 设置ms.Position为 0 而不是 1

C# 数组是零索引的。

于 2012-09-25T07:06:12.010 回答