Разобрать xml в С#: объединить xmlreader и linq в xml

Мне нужно разобрать большой файл XML на С#. Я использую LINQ-to-XML. У меня есть структура, как

<root>
       <node></node>
       <node></node>
</root>

Я хотел бы использовать XmlReader для цикла на каждом узле и использовать LINQ-to-XML для получения каждого узла и работы с ним?

Так что у меня в памяти только текущий узел.


person bobosh    schedule 11.08.2011    source источник
comment
Каков ваш фактический вопрос здесь?   -  person msarchet    schedule 11.08.2011
comment
@msarchet, думаю, вопрос ясен... он хочет использовать Linq to XML для каждого элемента <node>, но использовать XmlReader для получения этих элементов, чтобы не загружать весь документ в память   -  person Thomas Levesque    schedule 11.08.2011
comment
возможный дубликат Linq To XML, yield и других   -  person casperOne    schedule 11.08.2011


Ответы (1)


Вы можете сделать что-то вроде этого:

string path = @"E:\tmp\testxml.xml";
using (var reader = XmlReader.Create(path))
{

    bool isOnNode = reader.ReadToDescendant("node");
    while (isOnNode)
    {
        var element = (XElement)XNode.ReadFrom(reader);

        // Use element with Linq to XML
        // ...

        isOnNode = reader.ReadToNextSibling("node");
    }
}
person Thomas Levesque    schedule 11.08.2011
comment
это работает, но в некоторых случаях у меня возникает ошибка: невозможно преобразовать объект типа «System.Xml.Linq.XText» в тип «System.Xml.Linq.XElement xmlreader». Я не знаю, почему, поэтому я делаю тест перед броском (я проверяю тип узла). Но я не знаю, потеряю ли я результаты - person bobosh; 12.08.2011
comment
@bobosh, я не уверен, что вызывает эту проблему ... не могли бы вы опубликовать подмножество вашего XML-документа, из-за которого возникает проблема? - person Thomas Levesque; 12.08.2011
comment
это всегда один и тот же шаблон. Прежде чем я зациклился на узле node с xdocument, и у меня нет проблемы. На 2 тысячи записей я теряю три записи. в этих записях ничего не меняется - person bobosh; 12.08.2011
comment
ну, в них должно быть что-то другое, иначе поведение было бы таким же... - person Thomas Levesque; 12.08.2011