Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

XmlReader - problem reading xml file with no newlines

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.

like image 559
rabin Avatar asked Aug 25 '11 19:08

rabin


1 Answers

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();
    }
}
like image 172
Laurent Avatar answered Nov 03 '22 02:11

Laurent