当我尝试使用LINQ XmlReader类解析XML时,我看到了奇怪的行为。下面的测试案例:它看起来像是在0121,还是在XmlReader上使用Read()
方法之一,它错过了输入XML中的第二个bar
元素。如果在</bar>
和<bar>
之间添加任何空格,则它将正确解析第二个bar
元素。为什么XmlReader在没有空白分隔符的情况下跳过每一个其他元素?
有没有人有一个想法,为什么输入流搞砸了,以及如何解决这个问题?
[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);
}
循环可以通过使用'ReadToFollowing(“巴”)被显著优化',而不是'阅读()'(与乔恩的答案也适用)。 – 2014-04-22 16:34:12
我有一个类似的情况,我在while循环中使用'ReadToFollowing'和'While'和'ReadOuterXml'。如果文档使用换行符格式化,则它正常运行。当我有单行文档时,它会跳过以下所有节点。 – 2015-01-12 15:24:51