請注意這個問題是專用於XmlReader
而不是是否使用XDocument
或XmlReader
。爲什麼XmlReader會跳過元素?
我有一個XML片段:
private string GetXmlFragment()
{
return @"<bookstore>
<book genre='novel' ISBN='10-861003-324'>
<title>The Handmaid's Tale</title>
<price>19.95</price>
</book>
<book genre='novel' ISBN='1-861001-57-5'>
<title>Pride And Prejudice</title>
<price>24.95</price>
</book>
</bookstore>";
}
我也有一個擴展的方法:
public static IEnumerable<XElement> GetElement(this XmlReader reader, string elementName)
{
reader.MoveToElement();
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element
&& reader.Name.Equals(elementName, StringComparison.InvariantCulture))
{
yield return XNode.ReadFrom(reader) as XElement;
}
}
}
然後我嘗試做讓兩個book
元素:
var xmlReaderSettings = new XmlReaderSettings
{
CheckCharacters = false,
ConformanceLevel = ConformanceLevel.Fragment,
IgnoreComments = true,
IgnoreWhitespace = true,
IgnoreProcessingInstructions = true
};
using (var stringReader = new StringReader(this.GetXmlFragment()))
using (var xmlReader = XmlReader.Create(stringReader, xmlReaderSettings))
{
xmlReader.GetElement("book").Count().ShouldBe(2);
}
但是我只獲得第一個元素,調試ging表明,只要我得到第一個元素,閱讀器跳到第二個book
元素的title
。
溶液從HERE
任何幫助的啓發是非常讚賞。
無法重現。你的方法在我的機器上產生一個包含兩個元素的序列。你確定'this.GetXmlFragment()'生成你提供的XML嗎? –
奇怪的是,我已經更新了問題以包含方法 – babayi
請參閱https://dotnetfiddle.net/ssrAG1。不知怎的,你的調試干擾了嗎? –