首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XmlReader -如何处理大型XmlReader?

XmlReader -如何处理大型XmlReader?
EN

Stack Overflow用户
提问于 2014-06-04 18:46:54
回答 1查看 769关注 0票数 0

我想知道如何处理XmlReader中的大型复杂文件。在我的例子中,这是一个相当复杂的结构,我不适合在单一方法中处理所有这些。在我看来,这太脏了,所以我试着把这个方法分成几个小的方法。

因此,我从以下代码开始:

代码语言:javascript
复制
        // 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”的东西--没有读取值,但预见了类型?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-05 08:17:24

如果文件的大小太大,无法容纳内存,那么您可以使用这两个世界中的最好的;使用XmlReader读取高级别节点,然后使用John提到的高级抽象,即:

代码语言:javascript
复制
case "FirstBigTag": 
    using(XmlReader subReader = reader.ReadSubtree()) 
    {
        XElement element = XElement.Load(subReader);
        MyMethod(element);
    }

    break;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24045243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档