【问题标题】:XMLReader failing when there are no return characters没有返回字符时 XMLReader 失败
【发布时间】:2010-11-23 18:48:27
【问题描述】:

我正在使用 XML 阅读器类,并制作了以下示例。

        XmlReader xmlreader = XmlReader.Create("http://adomain/companies.xml");

        while (xmlreader.ReadToFollowing("company"))
        {
            Console.WriteLine("Company {0}",xmlreader.ReadElementContentAsString());

            if (xmlreader.ReadToFollowing("employees"))
            {
                Console.WriteLine("Employees{0}", xmlreader.ReadElementContentAsString());
            }
            Console.WriteLine();
        }

当 XML 有如下回车结果时,代码可以正常工作

公司网络蜘蛛公司 员工20

公司谷歌 员工20000

公司 Simons Gremlin 网页设计 员工1

像这样使用xml



网络蜘蛛公司
20员工>
谷歌公司>
20000员工>
Simons Gremlin 网页设计
1员工>
公司>

但是当我从 XML 中删除换行符时

网络蜘蛛公司20员工> 谷歌公司> 20000Simons Gremlin 网页设计1员工> 公司>

然后 xmlreader 开始跳过元素,我的结果集看起来很不一样

例如

公司网络蜘蛛公司 员工20000

我真的不明白为什么会这样,以及为什么 XML 阅读器会这样。

【问题讨论】:

    标签: .net xmlreader


    【解决方案1】:

    这是失败的,因为当你有换行符时,会有一个Whitespace 类型的额外节点,这会使你的逻辑正常工作。如果没有读者看到的换行符和这些额外的节点,ReadElementContentAsString 完成的自动跳到下一个元素会使事情变得混乱。

    这适用于两者 - 在这里,您在获取元素内容之前检查您是否已经在所需的位置,并且只有在您尚未到达时才移动。

    XmlReader xmlreader = XmlReader.Create(@"..\..\test.xml.txt");
    
    while ((xmlreader.Name == "company") || xmlreader.ReadToFollowing("company"))
    {
        Console.WriteLine("Company {0}", xmlreader.ReadElementContentAsString());
    
        if ((xmlreader.Name == "employees") || xmlreader.ReadToFollowing("employees"))
        {
            Console.WriteLine("Employees{0}", xmlreader.ReadElementContentAsString());
        }
        Console.WriteLine();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      • 1970-01-01
      • 2011-11-14
      • 2022-11-11
      • 1970-01-01
      • 2011-04-14
      • 1970-01-01
      相关资源
      最近更新 更多