この質問は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;
}
}
}
私はその後、実行して2つの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);
}
しかし、私は最初の要素であるdebug私が最初の要素を取得するとすぐに、リーダーはbook
要素のtitle
にジャンプします。
溶液はすべてのヘルプははるかに高く評価されてHERE
からインスピレーションを得ています。
。あなたのメソッドは、私のマシン上に2つの要素を持つシーケンスを生成します。 'this.GetXmlFragment()'は、あなたが提供したXMLを生成すると確信していますか? –
奇妙な質問を更新しました – babayi
https://dotnetfiddle.net/ssrAG1を参照してください。何とかあなたのデバッグが干渉しているのでしょうか? –