如何确定XML文件中元素的流位置? [英] How can I determine the stream position of an element in an XML file?

查看:72
本文介绍了如何确定XML文件中元素的流位置?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

朋友们,

我想阅读大型XML文件.为此,我使用了FileStream对象和XmlReader对象.我想知道XmlReader读取的每个元素的FileStream位置:

Hey friends,

I want to read through large XML files. To do so, I use a FileStream object and a XmlReader object. I want to know the FileStream''s position for every element read by the XmlReader :

using (FileStream strmFile = new FileStream(Some XML File))
{
  using (XmlReader xmlReader = XmlReader.Create(strmFile, settings))
  {
    while (xmlReader.Read())
    {
      switch (xmlReader.NodeType)
      {
        case XmlNodeType.Element:
          // Get the FileStream position here
          break;
      }
    }
  }
}



由于XmlReader使用8K缓冲区在文件中前进,因此FileStream的Position属性会一遍又一遍地返回8K,直到流前进到下一个8K.



Because the XmlReader advances through the file using a 8K buffer, the FileStream''s Position property returns 8K over and over again until the stream advances to the next 8K.

Is there a way to retrieve the absolute stream position?

推荐答案

//在这里获取FileStream位置.文件流位置将为100%

XmlReader xmlReader = XmlReader.Create(strmFile,settings)将整个文件流带到其内存中.

作为证明,请在此处关闭文件流.

// Get the FileStream position here . The File stream position would be 100%

XmlReader xmlReader = XmlReader.Create(strmFile, settings) will take the entire file stream to its memory.

As proof close the file stream here.

using (XmlReader xmlReader = XmlReader.Create(strmFile, settings))
  {
    strmFile.close();



您的读者仍然可以继续.

改进的答案
------------------------
获取行号和行位置



Your reader can still proceed.

Improved Answer
------------------------
To get Line Number and Line Position

IXmlLineInfo LineInfo;
using (FileStream strmFile = new FileStream("some file name"))
{
     using (XmlReader xmlReader = XmlReader.Create(strmFile))
  {
      LineInfo = (IXmlLineInfo)xmlReader;
    while (xmlReader.Read())
    {
      switch (xmlReader.NodeType)
      {
        case XmlNodeType.Element:
             // Get the FileStream position here
              MessageBox.Show(LineInfo.LineNumber.ToString());
              MessageBox.Show(LineInfo.LinePosition.ToString());
          break;
      }
    }
  }
}


这篇关于如何确定XML文件中元素的流位置?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆