代码之家  ›  专栏  ›  技术社区  ›  datacompboy

如何在C#中逐步加载XML?

  •  4
  • datacompboy  · 技术社区  · 16 年前

    我需要处理从 ResponseStream

    答复如下:

      <root>
         <node ...>
            .....
         </node>
         <node />
         ...
      </root>
    

    模式,我需要有能力的过程 <node> 在他们到达之前。

    有没有正常的方法用标准的.NET来解析它?

    3 回复  |  直到 16 年前
        1
  •  3
  •   Ani    16 年前
    System.Xml.XmlTextReader 
    

    表示提供对XML数据的快速、非缓存、仅转发访问的读取器

    http://msdn.microsoft.com/en-us/library/system.xml.xmltextreader.aspx

    这是一个快速的攻击,但它确实证明了读者实际上是懒惰的。

     public class XmlTextReaderTest
        {
            public void RunTest()
            {
                var fs = new XmlTextReader(new Fs(@"c:\TestXml.xml"));
                while (fs.Read())
                    File.AppendAllText(@"c:\xLog.txt", "Processing node..." + Environment.NewLine);
            }
        }
    
        public class Fs : FileStream
        {
            public Fs(string path)
                : base(path, FileMode.Open)
            {
    
            }
    
            public override int Read(byte[] array, int offset, int count)
            {
                File.AppendAllText(@"c:\xLog.txt", "Reading from stream..." + Environment.NewLine);
                var ans = base.Read(array, offset, count);
                return ans;
            }
    }
    
        2
  •  1
  •   Jon Hanna    16 年前

    不要在异步回调上调用它,您不需要(相信我,这会变得更清楚…)。

    Response.Flush()

    当GetResponse()返回时,从ResponseStream创建XMLReader。它将从可用的第一个块开始处理,并获得后续块,因为它们对您的代码非常透明。

    yield return 而不是建立一个收藏。

    需要 他们开始发送块作为延迟,即使是最有效的方法对你来说仍然是太大了。

    作为记录,我最近已经确认,在处理分块数据的WebResponse上使用XmlReader时(我同时控制客户机和服务器代码,并且可以在调试器中运行这两个代码并检查操作顺序),处理确实是在每个分块都可用时完成的。

        3
  •  0
  •   TomTom    16 年前