Xmlreader跳过兄弟

本文关键字:兄弟 Xmlreader | 更新日期: 2023-09-27 18:05:46

我使用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文件,缩进并保存它时,节点不会跳过。

Xmlreader跳过兄弟

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-loop条件中使用IsStartElement来解决。