我有一些动态生成的XML数据,这些数据将被少数使用者(ASPX页面,Flash文件或其他应用程序)使用。将XMLDataSource绑定到HTTP处理程序
我已经实现它作为自定义处理程序。我在处理程序中构造XML并使用response.write输出它。
现在如果我将XMLDataSource的DataFile属性设置为处理程序,它会尝试从字面上读取ashx文件并且不会通过HTTP调用它。
有什么建议吗?
我有一些动态生成的XML数据,这些数据将被少数使用者(ASPX页面,Flash文件或其他应用程序)使用。将XMLDataSource绑定到HTTP处理程序
我已经实现它作为自定义处理程序。我在处理程序中构造XML并使用response.write输出它。
现在如果我将XMLDataSource的DataFile属性设置为处理程序,它会尝试从字面上读取ashx文件并且不会通过HTTP调用它。
有什么建议吗?
将您的XML代码放在一个单独的类中。让处理程序使用该类创建XML并将结果发送给客户端(顺便说一下,不要使用Response.Write XML文档技术是用来构建XML的第一位?)。
确保该类可以将完整的XML作为字符串公开。
在您的ASPX页面中,使用相同的类并将XML字符串分配给XmlDataSource控件的data属性。
编辑:
由于您使用的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代。
我正在使用XMLTextWriter进行XML生成。 我不能创建一个类,因为这个数据将会比ASP.Net的其他消费者。它必须是可以从网络访问的东西,因此HttpHandler – Midhat 2009-05-22 07:56:49