1

我有一些动态生成的 XML 数据将被少数消费者使用(一个 ASPX 页面、一个 flash 文件,也许还有另一个)。

我已将其实现为自定义处理程序。我在处理程序中构造 XML 并使用 response.write 将其输出。

现在,如果我将 XMLDataSource 的 DataFile 属性设置为处理程序,它会尝试逐字读取 ashx 文件,而不是通过 HTTP 调用它。

有什么建议吗?

4

1 回答 1

3

将您的 XML 生成代码放在一个单独的类中。让处理程序使用该类来创建 XML 并将结果发送到客户端(顺便说一句,不要使用 Response.Write 你首先使用什么 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 回答