【问题标题】:Writing XML to memory instead of disk将 XML 写入内存而不是磁盘
【发布时间】:2009-10-21 15:50:41
【问题描述】:

如何将 FOR XML PATH 存储过程的结果写入内存而不是磁盘上的文件?

目前的做事方式:

private  void GetChartData(string OC_Ttl1, string OC_Ttl2, string OC_OL31)
{
    OC_Ttl_1 = OC_Ttl1;
    OC_Ttl_2 = OC_Ttl2;
    OC_OL3_1 = OC_OL31;
    //Output xml
    DataSet orgDataSet = new DataSet();
    orgDataSet.ReadXml(cmd_Org.ExecuteXmlReader(), XmlReadMode.Auto);
    orgDataSet.WriteXml("InputXMLFiles/" + OC_OL3_1.Replace(" ", 
        "_").Replace("/", "-") + ".xml");
}

我不想将文件写入磁盘以供其他方法操作,而是希望此方法将 xml 返回到内存。

我认为这会比写入磁盘快得多......

【问题讨论】:

    标签: c# .net xml for-xml


    【解决方案1】:

    你有一个XmlReader - 你可以做所有的事情。例如

    XmlDocument doc = new XmlDocument();
    using(XmlReader xr = cmd_Org.ExecuteXmlReader()) {
        doc.Load(xr);
    }
    // TODO: play with "doc" with xpath etc
    

    【讨论】:

    • 谢谢马克。我不确定这对我目前的情况有何帮助。温柔点,我是.Net新手.....
    • 抱歉耽搁了;我在火车上。 XmlReader 本质上是传入 xml 的“管道”。通过将其加载到 XmlDocument 之类的东西中,您可以访问完整的 DOM 对象模型,并可以调查 xml。如果不是 - 请说明您想对数据做什么?
    • 谢谢马克。在 XML 数据写入磁盘的那一刻,然后调用另一个方法,该方法对数据执行 XSLCompiledTransform 以将其从平面 xml 文档转换为分层文档。然后将该数据写入磁盘上的 xml 文件。然后调用另一个方法来执行另一个 Xsl 转换,将 xml 输出为 html。抱歉,昨天女朋友生日,迟迟没有回来。
    【解决方案2】:

    DataSet.WriteXml 有很多重载 - 您可以写入流(包括 MemoryStream)和写入器(包括 StringWriter)。假设您真的想通过 DataSet 进行操作 - 如果您很高兴直接获取 XML 而不使用 DataSet,那么只需使用 Marc 的建议即可。

    【讨论】:

      【解决方案3】:

      您可以调用写入流的WriteXml 的重载,并使用MemoryStream,尽管您可能意味着您希望将XML 作为一个大长字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        相关资源
        最近更新 更多