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

本文关键字:问题 文件 xml 换行符 读取 | 更新日期: 2023-09-27 18:06:36

当我使用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文件上产生不同的结果,这对我来说没有意义。

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

参见如果没有空格分隔符,为什么XmlReader跳过所有其他元素?

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

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

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