Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
377 views
Welcome To Ask or Share your Answers For Others

1 Answer

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...