Warum überspringt XmlReader jedes andere Element, wenn es kein Leerzeichen-Trennzeichen gibt?

Beim Parsen von XML mithilfe der LINQ XmlReader-Klasse tritt ein merkwürdiges Verhalten auf. Testfall unten: Es sieht so aus, als ob ich benutze(XElement)XNode.ReadFrom(xmlReader) oder einer derRead() Methoden auf XmlReader, es fehlt die Sekundebar Elemente in der Eingabe-XML. Wenn zwischen dem ein Leerzeichen eingefügt wird</bar> und<bar> dann wird es das zweite analysierenbar Element richtig.

Hat jemand eine Idee, warum der Eingabestream durcheinander gerät und wie man dieses Problem umgeht?

    [Test]
    [Explicit]
    public void ShouldParseCorrectNumberOfElements()
    {
        var xml = @"<foo><bar>wtf</bar><bar>wtf2</bar></foo>";
        XmlReader xmlReader = XmlReader.Create(new MemoryStream(Encoding.UTF8.GetBytes(xml)));

        int count = 0;
        xmlReader.MoveToContent();
        while (xmlReader.Read())
        {
            if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "bar")
            {
                var element = xmlReader.ReadOuterXml();
                Console.WriteLine("just got an " + element);
                count++;
            }
        }
        Assert.AreEqual(2, count);
    }

Antworten auf die Frage(2)

Ihre Antwort auf die Frage