xmlreader пропустить одноуровневый

Я использую Xmlreader для анализа XML-файла.

Мой метод выглядит так

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

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

        isOnNode = reader.ReadToNextSibling("resource");
    }
}

Но xmlreader пропускает родственный узел «ресурс». Более того, когда я открываю файл xml с помощью Visual Studio, делаю отступ и сохраняю его, узлы не пропускаются.


person bobosh    schedule 17.08.2011    source источник
comment
Пожалуйста, пометьте вопрос соответствующим языковым тегом.   -  person Felix Kling    schedule 17.08.2011
comment
Пожалуйста, предоставьте также содержимое файла XML.   -  person Sven    schedule 17.08.2011


Ответы (1)


Метод XNode.ReadFrom помещает средство чтения после закрывающего элемента прочитанного поддерева. Если в файле нет пробелов, это будет следующий элемент <resource>. Затем этот элемент пропускается вызовом ReadToNextSibling.

Следующее должно исправить это:

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

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

        if( !reader.IsStartElement("resource") )
            isOnNode = reader.ReadToNextSibling("resource");
    }
}

Если нет элементов, отличных от <resource>, в качестве одноуровневых элементов <resource>, проблему также можно решить, просто используя IsStartElement в условии цикла while.

person Sven    schedule 17.08.2011