6

を使用して、XsltCompiledTransform一部のXMLをHTMLのフラグメントに変換しています(完全なHTMLドキュメントではなく、他の場所で生成されたページに含めるDIVのみ)。

私は次のように変換を行っています:

StringBuilder output = new StringBuilder();

XmlReader rawData = BusinessObject.GetXml();
XmlWriter transformedData = XmlWriter.Create(output);

XslCompiledTransform transform = new XslCompiledTransform();

transform.Load("stylesheet.xslt");

transform.Transform(rawData, transformedData);

Response.Write(output.ToString());

私の問題は、変換の結果が常にこのXMLディレクティブで始まることです。

<?xml version="1.0" encoding="utf-16"?>

変換されたデータにこれが表示されないようにするにはどうすればよいですか?

編集:

XSLTにxml宣言を出力したくないと言っています

<xsl:output method="html" version="4.0" omit-xml-declaration="yes"/>

しかし、これは私の出力に表示されるディレクティブには影響しないようです。

興味深いことに、私のXMLデータソースとXSLTトランスフォームの両方が自分自身をUTF-8notとして指定していUTF-16ます。

更新: 出力メカニズムとしてstring(builder)を使用しているため、UTF-16が表示されているようです。MemoryStreamの代わりにを使用するようにコードを変更するStringBuilderと、UTF-8エンコーディングが保持されます。stringこれは、このタイプの内部動作と、エンコーディングの処理方法に関係していると思います。

4

2 に答える 2

14

オブジェクトを使用する必要がありXmlWriterSettingsます。XML宣言を省略するようにプロパティを設定し、それをのコンストラクターに渡しますXmlWriter

StringBuilder output = new StringBuilder();
XmlReader rawData = BusinessObject.GetXml();

XmlWriterSettings writerSettings = new XmlWriterSettings();
writerSettings.OmitXmlDeclaration = true;

using (XmlWriter transformedData = XmlWriter.Create(output, writerSettings))
{
  XslCompiledTransform transform = new XslCompiledTransform();
  transform.Load("stylesheet.xslt");
  transform.Transform(data, transformedData);
  Response.Write(output.ToString());
}
于 2009-11-16T06:41:49.320 に答える
3

最も簡単な方法は、このノードをXSLTに追加することです。

<xsl:output 
    method="html" 
    omit-xml-declaration="yes"/>
于 2009-11-16T02:45:09.990 に答える