I'm in the position to parse XML in .NET. Now I have the choice between at least XmlTextReader
and XDocument
. Are there any comparisons between those two (or any other XML parsers contained in the framework)?
Maybe this could help me to decide without trying both of them in depth.
The XML files are expected to be rather small, speed and memory usage are a minor issue compared to easiness of use. :-)
(I'm going to use them from C# and/or IronPython.)
Thanks!
If you're happy reading everything into memory, use
XDocument
. It'll make your life much easier. LINQ to XML is a lovely API.Use an
XmlReader
(such asXmlTextReader
) if you need to handle huge XML files in a streaming fashion, basically. It's a much more painful API, but it allows streaming (i.e. only dealing with data as you need it, so you can go through a huge document and only have a small amount in memory at a time).There's a hybrid approach, however - if you have a huge document made up of small elements, you can create an
XElement
from anXmlReader
positioned at the start of the element, deal with the element using LINQ to XML, then move theXmlReader
onto the next element and start again.XmlTextReader
is kind of deprecated, do not use it.From msdn blogs by XmlTeam
Effective Xml Part 1: Choose the right API
The world has moved on, have you? Xml APIs you should avoid using.
Furthermore, intellisense in Visual Studio doesn't list
XmlTextReader
under System.Xml namespace. The class is defined as:The
XmlReader.Create
factory methods return other internal implementations of the abstract classXmlReader
depending on the settings passed.For forward-only streaming API (i.e. that doesn't load the entire thing into memory), use XmlReader via
XmlReader.Create
method.For an easier API to work with, go for XDocument aka LINQ To XML. Find
XDocument
vsXmlDocument
here and here.