【问题标题】:XmlReader - problem reading xml file with no newlinesXmlReader - 读取没有换行符的 xml 文件时出现问题
【发布时间】:2011-11-04 00:26:35
【问题描述】:

当我使用 XmlReader 解析 XML 文件时,我会得到不同的结果,具体取决于 XML 文件的格式是否正确(即使用换行符)。

这是我正在使用的代码:

XmlReader reader = new XmlTextReader(xmlfile);
reader.MoveToContent();
while (reader.Read())
{
    switch (reader.NodeType)
    {
        case XmlNodeType.Element:
            if (reader.Name == "entry")
            {
                Console.WriteLine(reader.ReadElementContentAsString());
            }
            break;
    }
}

而我一直使用的 XML 内容是:

<xport><meta><columns>5</columns><legend><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:memory_total_kib</entry><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:memory_free_kib</entry><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:xapi_memory_usage_kib</entry><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:xapi_free_memory_kib</entry><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:xapi_live_memory_kib</entry></legend></meta></xport>

代码只打印出 3 行,而实际上应该打印 5 行。我想我遗漏了一些东西,但对我来说,相同的代码会在同一个 XML 文件上产生不同的结果,这对我来说没有意义我没有空格。

【问题讨论】:

    标签: c# .net xml xmlreader


    【解决方案1】:

    Why does XmlReader skip every other element if there is no whitespace separator?

    您正在调用 [ReadElementContentAsString],它将使用该元素并将“光标”放置在下一个元素之前。然后您再次调用 Read,这会将光标移动到(例如,移动到元素内的文本节点)。

    修改后的循环(几乎与其他问题完全相同):

    while (!reader.EOF)
    {
        if (reader.NodeType == XmlNodeType.Element && reader.Name == "entry")
        {
            Console.WriteLine(reader.ReadElementContentAsString());
        }
        else
        {
            reader.Read();
        }
    }
    

    【讨论】:

    • 谢谢。我发誓我已经为此搜索过。
    • 您是否使用 SO 的内部搜索进行搜索?因为它不是很好,所以谷歌要好得多;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    相关资源
    最近更新 更多