I'm seeing strange behavior when I try to parse XML using the LINQ XmlReader class. Test case below: it looks like whether I use (XElement)XNode.ReadFrom(xmlReader)
or one of the Read()
methods on XmlReader, it misses the second bar
elements in the input XML. If any whitespace is added between the </bar>
and <bar>
then it will parse the second bar
element correctly.
Does anyone have an idea of why the input stream gets messed up and how to get around this problem?
[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);
}
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…