C#XMLReader奇怪的第17位关闭的XMLReader错误

C#XMLReader奇怪的第17位关闭的XMLReader错误,c#,xml,xmltextreader,C#,Xml,Xmltextreader,我有一个列表视图,里面有很多东西。第17位的内容总是会中断(ObjectDisposedException“无法从关闭的文本阅读器读取”)。1至16岁以及18至24岁工作正常。如果我把x从17号移到16号,它会再次工作,但新的17号会中断。我的代码没有特别提到任何地方 XML文件遵循以下格式 <Profiles> <Profile name="a" type="A"> <ListOne>1,2,3,4,5,6,7,8</ListOne>

我有一个列表视图,里面有很多东西。第17位的内容总是会中断(ObjectDisposedException“无法从关闭的文本阅读器读取”)。1至16岁以及18至24岁工作正常。如果我把x从17号移到16号,它会再次工作,但新的17号会中断。我的代码没有特别提到任何地方

XML文件遵循以下格式

<Profiles>
  <Profile name="a" type="A">
    <ListOne>1,2,3,4,5,6,7,8</ListOne>
    <ListTwo>1,2,3,4,5,6,7,8</ListTwo>
  </Profile>
  <Profile name="b" type="B">
    ...
    ...
</Profiles>
然后我有一个从子树中提取列表1和2的方法

if(subtree != null)
{
  subtree.ReadToFollowing("ListOne");
  subtree.Read();
  string[] ListOneArray = subtree.Value.Split(',');

  subtree.ReadToFollowing("ListTwo");
  subtree.Read();
  string[] ListTwoArray = subtree.Value.Split(',');
}
这就是问题所在。ObjectDisposedException无法从关闭的文本读取器读取。当我进入subtree.ReadToFollowing(“ListTwo”)时,它总是会中断,但前提是我在XML列表中选择了第17个概要文件。我看不出我是如何在任何时候关闭文本阅读器的。同样,这也适用于剖面18、19、20等,以及1到16,但不知何故总是在位置17处中断,不管在那里有什么。我看不出第17名有什么不同

救命啊

ReadSubTree()
返回仍然从底层流读取的读取器。
由于在从该读卡器读取之前关闭了流,因此它将无法工作

一般来说,XmlReader的仅向前模式非常烦人。

除非您处理的是非常大的文件,否则应该改用LINQtoXML;使用起来容易多了。

我个人发现,使用XML时,使用Linq2Xml要容易多了

XDocument xDoc = XDocument.Load(...);
var profiles = xDoc.Descendants("Profile")
    .Where(x=>x.Attribute("name").Value=="a")
    .Select(p => new
    {
        List1 = p.Element("ListOne").Value.Split(','),
        List2 = p.Element("ListTwo").Value.Split(',')
    })
    .ToList();

在哪里关闭
子树
?基于MSDN文档,我想知道最好的做法是否是在代码中的某个地方显式关闭
子树
XmlReader


好的,我会调查一下。你能理解为什么它一直适用于大多数配置文件,但从来就不适用于其中一个配置文件吗?
XDocument xDoc = XDocument.Load(...);
var profiles = xDoc.Descendants("Profile")
    .Where(x=>x.Attribute("name").Value=="a")
    .Select(p => new
    {
        List1 = p.Element("ListOne").Value.Split(','),
        List2 = p.Element("ListTwo").Value.Split(',')
    })
    .ToList();