當我嘗試使用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