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>

スペースを考慮して、多くのパラメーターを削除しました。

誰か助けてくれませんか?

よろしく。

みなさん、こんにちは。argsList に追加するときに、System.Web.HttpUtility.HtmlEncode メソッドを使用して、ウムラウト文字に必要な値を取得しました。これは物事を行うためのより迅速な方法でしたが、私の要件に対してテストされていないため、機能しない可能性があります. より良いアプローチは、この投稿で提案されているバイト配列を使用することです。返信してくれたみんなに感謝します。

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 エンコーディングとして使用します。次に、変換出力を、文字ストリームの宛先ではなく、バイト ストリームの宛先に送信します。文字ストリーム宛先 (ライター) を使用する場合、XSLT プロセッサは文字をバイトとしてエンコードせず、それをライターに任せます。ライターは、XML について、または XML がエンコードできない文字をどのようにエスケープするのが好きかについて何も知りません。

于 2012-07-13T13:28:46.960 に答える