XmlReader - 读取没有换行符的xml文件出现问题

8
使用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文件上产生不同的结果是不合理的。

1个回答

11

请参见为什么XmlReader会在没有空白分隔符的情况下跳过每个其他元素?

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

修改后的循环(几乎与另一个问题完全相同):

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

2
谢谢。我发誓我已经在 Stack Overflow 上搜索过了。 - rabin
1
你是否使用了 SO 的内部搜索?因为它不是很好用,Google 要好得多 ;) - Laurent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接