如何确定XML文件中元素的流位置? [英] How can I determine the stream position of an element in an XML file?
问题描述
朋友们,
我想阅读大型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屋!