XmlReader - problem reading xml file with no newlines

拥有回忆 提交于 2019-11-26 21:51:52

问题


When I use XmlReader to parse an XML file, I get different results depending on whether the XML file is properly formatted (i.e. with newlines) or not.

This is the code I'm using:

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;
    }
}

And the XML content I've been using is:

<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>

The code prints out only 3 lines, when it really should be printing 5. I guess I'm missing something, but it doesn't make sense to me that the same code would produce different results on the same XML file when I don't have white-spaces.


回答1:


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

You're calling [ReadElementContentAsString], which will consume the element and place the "cursor" just before the next element. You're then calling Read again, which moves the cursor on (e.g. to the text node within the element).

Modified loop (almost exactly like in the other question):

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


来源:https://stackoverflow.com/questions/7196468/xmlreader-problem-reading-xml-file-with-no-newlines

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!