Bitte beachten Sie, diese Frage ist spezifisch für XmlReader
und nicht, ob XDocument
oder XmlReader
zu verwenden.Warum überspringt der XmlReader Elemente?
Ich habe ein XML Fragment als:
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>";
}
ich auch eine Erweiterungsmethode haben, wie:
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;
}
}
}
ich dann versuchen, die beiden book
Elemente zu erhalten, indem Sie:
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);
}
Allerdings bekomme ich nur das erste Element, debuggen ging zeigt, dass sobald ich das erste Element bekomme, der Leser zum title
des zweiten book
Elements springt.
Die Lösung von HERE
Jede Hilfe ist inspiriert wird sehr geschätzt.
konnte nicht reproduzieren. Ihre Methode erzeugt eine Sequenz mit zwei Elementen auf meinem Computer. Sind Sie sicher, dass 'this.GetXmlFragment()' den von Ihnen bereitgestellten XML-Code erzeugt? –
Seltsam, Ich habe die Frage aktualisiert, um die Methode – babayi
zu enthalten Siehe https://dotnetfiddle.net/ssrAG1. Stört das Debugging irgendwie, vielleicht? –