xmlreader跳过兄弟

时间:2011-08-17 12:58:42

标签: c# 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跳过兄弟节点“resource”。 此外,当我使用visual studio打开xml文件时,缩进并保存它,节点不会被跳过。

1 个答案:

答案 0 :(得分:2)

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>元素的兄弟元素,那么问题也可以通过在while循环条件中使用IsStartElement来解决。