【问题标题】:xmlreader skip siblingxmlreader 跳过同级
【发布时间】:2011-08-17 12:58:42
【问题描述】:

我使用 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 跳过了兄弟节点“资源”。 此外,当我用 Visual Studio 打开 xml 文件时,缩进并保存它,节点不会跳过。

【问题讨论】:

  • 请用适当的语言标签标记问题。
  • 请同时提供XML文件的内容。

标签: c# xmlreader


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2019-01-19
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多