xmlreader пропустить брат - PullRequest
       6

xmlreader пропустить брат

0 голосов
/ 17 августа 2011

Я использую 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, делаю отступ и сохраняю его, узлы не пропускаются.

1 Ответ

2 голосов
/ 17 августа 2011

Метод 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.

...