我有将由几个消费者(aspx页,flash文件,也许另一个以及)。

被消耗一些动态生成的XML数据

我已经实现为自定义处理程序。我构建XML在处理程序,并将其输出使用的Response.Write。

现在如果我把我的XmlDataSource到处理程序的数据文件属性,它试图从字面上看ashx的文件,并通过HTTP不会调用它。

任何意见?

有帮助吗?

解决方案

将XML生成代码在一个单独的类。有处理程序使用类来创建XML并将结果发送给客户端(顺便说一句,您使用的建设摆在首位的XML?不要用什么样的Response.Write 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生成静态类被实例化。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top