我想知道如何处理XmlReader中的大型复杂文件。在我的例子中,这是一个相当复杂的结构,我不适合在单一方法中处理所有这些。在我看来,这太脏了,所以我试着把这个方法分成几个小的方法。
因此,我从以下代码开始:
// Create an XML reader for this file.
using (var reader = XmlReader.Create(new StringReader(fileText)))
{
while (reader.Read()){
if (reader.IsStartElement(){
switch (reader.Name){
case "FirstBigTag": MyMethod(reader, otherNecessaryMethods) break;
....
}
}
}
} 从理论上讲,这会很好。但我经历了一些情况,这种行为导致了一个错误的状态。
在某些情况下,MyMethod正在解析正确的元素,然后我无法清楚地看到“在哪里结束”,因此,如果不读取下一个节点,就不能离开该方法。这意味着我使用一个元素而不处理它(因为这应该由main-方法来处理)。当我现在返回时,我回到了我的“主”-method,但这是决定下一步必须调用哪个方法所必需的消耗字符串的点。我怎么才能解决这个问题?是否有类似"reader.IsEndElement“或"reader.look”的东西--没有读取值,但预见了类型?
发布于 2014-06-05 08:17:24
如果文件的大小太大,无法容纳内存,那么您可以使用这两个世界中的最好的;使用XmlReader读取高级别节点,然后使用John提到的高级抽象,即:
case "FirstBigTag":
using(XmlReader subReader = reader.ReadSubtree())
{
XElement element = XElement.Load(subReader);
MyMethod(element);
}
break;https://stackoverflow.com/questions/24045243
复制相似问题