1

動的に生成されたXMLデータがいくつかあり、それらは少数のコンシューマーによって消費されます(ASPXページ、フラッシュファイル、および別のファイルもあります)。

カスタムハンドラーとして実装しました。ハンドラーでXMLを作成し、response.writeを使用して出力します。

ここで、XMLDataSourceのDataFileプロパティをハンドラーに設定すると、ashxファイルを文字通り読み取ろうとし、HTTPを介して呼び出されません。

何かアドバイス?

4

1 に答える 1

3

XML生成コードを別のクラスに配置します。ハンドラーにクラスを使用してXMLを作成し、結果をクライアントに送信させます(ところで、Responseを使用しないでください。最初にXMLを構築するために使用しているXMLドキュメント技術を記述してください)。

クラスが完成したXMLを文字列として公開できることを確認してください。

ASPXページで同じクラスを使用し、XML文字列をXmlDataSourceコントロールのデータプロパティに割り当てます。

編集

XmlTextWriterを使用していて、コメントから、上記は明らかに少し混乱しているので、これらの詳細を追加します。

現在XMLを生成しているコードを取得し、それをApp_Codeフォルダーのクラス(または場合によってはdllプロジェクト)に配置する必要があります。このクラスには、パラメーターとしてXmlTextWriterを受け取るメソッドがあります。

public class XmlCreator
{
    public void GenerateXml(XmlTextWriter writer)
    {
         //All your code that writes the XML
    }
}

ハンドラーには、次のコードがあります。-

XmlTextWriter writer = new XmlTextWriter(Response.OutputStream, Encoding.UTF8);
XmlCreator creator = new XmlCreator();
XmlCreator.GenerateXml(writer);

Response.Writeは必要ないことに注意してください。これにより、エンコードが適切に行われます。

ASP.NETページで使用するもの:-

StringWriter source = new StringWriter();
XmlTextWriter writer = new XmlTextWriter(source, Encoding.Unicode);
XmlCreator creator = new XmlCreator();
XmlCreator.GenerateXml(writer);

yourXmlDataSource.Data = source.ToString();

XmlCreatorをインスタンス化する必要がない場合は、静的クラスを使用できます。これは、XM世代にフィードするために必要な他のデータによって異なります。

于 2009-05-22T07:22:43.943 に答える