C#XMLReader奇怪的第17位关闭的XMLReader错误
我有一个列表视图,里面有很多东西。第17位的内容总是会中断(ObjectDisposedException“无法从关闭的文本阅读器读取”)。1至16岁以及18至24岁工作正常。如果我把x从17号移到16号,它会再次工作,但新的17号会中断。我的代码没有特别提到任何地方 XML文件遵循以下格式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>
<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();