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