我有一些动态生成的XML数据将由少数消费者使用(一个ASPX页面,一个Flash文件,也可能是另一个)。
我已将其实现为自定义处理程序。我在处理程序中构造XML并使用response.write输出它。
现在,如果我将XMLDataSource的DataFile属性设置为处理程序,它会尝试按字面读取ashx文件,而不是通过HTTP调用它。
有什么建议吗?
答案 0 :(得分:3)
将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生成提供的其他数据。