哈,思归大哥,就知道这会你在~你的MSN或者ICQ一类的,号码是多少………………XmlTextReader?什么意思呢?记得在perl中有个函数是sysseek,在操作文件的时候可以直接在某行上开始操作,而不用一行一行的读下去……一般用在做断点操作上,而XML呢?我看了一下帮助,XmlTextReader是只进读取的,这代表他是一行一行的过去的?

解决方案 »

  1.   

    XmlTextReader is stream-based and more efficient to process large xml files, you could do something likeusing System.Xml;
            XmlTextReader reader = null;
            int nNode = 0;
            int nCount = 5000;
         try {
               
            reader = new XmlTextReader(filename);
            reader.WhitespaceHandling = WhitespaceHandling.None;
            while (reader.Read())
            {
                if (reader.NodeType ==XmlNodeType.Element)
                      nNode++;             if (nNode == nCount)
                 {
                       Console.Write("<{0}>", reader.Name);
                       Console.Write("<{0}>", reader.ReadInerXml());                       break;              
                 }        }
                
         }     finally 
        {
            if (reader!=null)
              reader.Close();
         }
      

  2.   

    while (reader.Read())
    既然这样了,相比就是逐行的了?
    看了代码,根据我的理解,是每个节点去比较是否是第5000的个节点,是就读取这样的话,就没意义了,比较那5000个点的时候失去了意义……是不能实现直接跳跃到某个点读取的了……
    今天偶然(实际上是故意关注此类消息,找出来的)看到一个论坛,一个栏目的数据量达到了20W条,他一点也不慢,和其他几千条数据的栏目,效果一样~~~后来知道他是这样做的
    一个栏目的索引按文本方式存在一个文本文件中,然后要读好多好数据的时候,直接从那行数据开始读取,这样的话,即便是100W条数据,读取的时候读的是第10W行,那前面9万9千行也没有读,大概和下载软件中的断点续载的方式一样,这个方法,我当兵前也曾经听说过,一个好象也是老美,用PERL+这个方法做了一个DNS序列库,但好象还用了些别的什么据说数据量十分的海量……由于那篇介绍是老外的,我英语不好,就用东方快车翻译了看,有很多地方没看明白……
      

  3.   

    if it is a text file, there is no way you can jump to the right record unless go through the first 9万9千行, so the file has to be fixed-length record-oriented, so that you can use FileStream to open it and Seek(recordSize * 99000, SeekOrigin.Begin) and then Read() out the record there
      

  4.   

    是的,我看到的那个论坛的索引就是用SEEK读的,他每个记录占一行,第N条也就是第N行,这样应该可以直接读取了的吧?如果一个文件,不能象这样,从中间某个点开始读,而不去读取前面的数据的话,大概断点续载功能就无法实现了?把这个方法引入到索引中,我觉得是个不错的想法……可我又不想回去再用文本,我以前用过TXT,问题很多……
      

  5.   

    于是我想到了XML,如果XML能实现的话,也许能解决一些问题:)
    但看了您的回复,似乎不行?
      

  6.   

    >>>不是不行but you have to read the first 9万9千 nodes to get to 10Wth node
      

  7.   

    看样子思归大哥所写的中文估计是Ctrl+c来的……