2

我需要写“&#D;” 相当于 xml 的变音字符。例如,如果字符串是“für”,那么预期的输出是“ fürü,相当于 ü

这是我目前拥有的代码:

private bool WriteOutXMLFile(string xsltFileName, XsltArgumentList argsList, string outputFile)
    {

            XslCompiledTransform transform = new XslCompiledTransform(true);
            transform.Load(xsltFileName);

            using(StreamWriter sw = new StreamWriter(outputFile,false,Encoding.UTF8))
            {
                transform.Transform(this.InputFilePath, argsList, sw);
            }

            return true;
        }

这是 XSLT:

<?xml version="1.0" encoding="UTF-8" ?>

 <xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:ms="urn:schemas-microsoft-com:xslt"
  xmlns:dt="urn:schemas-microsoft-com:datatypes">
  <xsl:output method="xml" />

<xsl:param name="InsideSales1"></xsl:param>
<xsl:param name="InsideSales2"></xsl:param>
<xsl:template match="@*|node()">
<xsl:copy>
  <xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>

 <!--Project output nodes-->
 <!--Calculation Number-->
 <xsl:template match="kalkulationsnummer" >
 <xsl:element name="kalkulationsnummer">
  <xsl:value-of select="$CalculationNumber" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>

出于空间考虑,我删除了很多参数。

有人可以帮忙吗?

问候。

大家好,我使用 System.Web.HttpUtility.HtmlEncode 方法在将变音符号添加到 argsList 时获取所需的值。这是一种更快的做事方式,但它可能不起作用,因为它没有针对我的要求进行测试。更好的方法是使用本文中建议的字节数组。感谢所有回复的人。

4

2 回答 2

2

只需使用

<xsl:output encoding="us-ascii"/>

在您的 C# 代码中尝试:

using(StreamWriter sw = new StreamWriter(outputFile,false,Encoding.ASCII))     
于 2012-07-13T12:14:13.330 回答
1

首先,按照 Dimitre 的建议,使用 us-ascii 作为 xsl:output 编码。其次,将转换输出发送到字节流目的地,而不是字符流目的地。如果您使用字符流目标(Writer),XSLT 处理器不会将字符编码为字节,它将把它留给 Writer,而 Writer 对 XML 或 XML 如何转义不可编码的字符一无所知。

于 2012-07-13T13:28:46.960 回答