Blogger :
Oleg Tkachenko
All posts :
All posts by Oleg Tkachenko
Category :
.NET XML, System.XML
Blogged date : 2005 Sep 23
XLinq is new and hot technology everybody seems to be happy with. I`m going to post a different review series - not what I like, but what I dislike and want to be fixed in XLinq. Sorry in advance for bitter words, but it`s better when your friend says them.
XML functional construction
XML Tree functional construction is a great stuff and definitely a big improvement over the upside down DOM-style XML building. I only wanted to note that one doesn`t have to wait years for C# 3.0 to be able to build XML tree in a natural top-down way, that was actually possible from the very beginning (here is .NET 2.0 sample, in .NET 1.X one would need XmlNodeWriter):
XmlDocument doc = new XmlDocument();
XmlWriter w = doc.CreateNavigator().AppendChild();
w.WriteStartElement("contacts");
w.WriteStartElement("contact");
w.WriteElementString("name", "Patrick Hines");
w.WriteStartElement("phone");
w.WriteAttributeString("type", "home");
w.WriteString("206-555-0144");
w.WriteEndElement();
w.WriteStartElement("phone");
w.WriteAttributeString("type", "work");
w.WriteString("425-555-0145");
w.WriteEndElement();
w.WriteStartElement("address");
w.WriteElementString("street1", "123 Main St");
w.WriteElementString("city", "Mercer Island");
w.WriteElementString("state", "WA");
w.WriteElementString("postal", "68042");
w.WriteEndElement();
w.WriteEndElement();
w.WriteEndElement();
w.Close();
Should admit XLinq`s functional construction still looks shorter and tree-friendly, but it is seriously constrained to building only XLinq XML tree in-memory. If one day you decide that building in-memory XML tree just to be saved to a disk is a waste of memory (and it is a waste), you would need to rewrite completely XML construction code and that`s bad. XmlWriter has no limits here - you can use it for building XML tree in memory or writing XML directly to a stream in a fast efficicent non-caching way. XmlWriter just does its job - writes XML with no coupling to the result and that`s way any code that produces XML with XmlWriter is more reusable.
Ergo - please don`t repeat System.Xml mistakes and treat XmlWriter as a first class citizen - provide a way to build XDocument/XElement with XmlWriter, that will be good architecturally and will provide smoother migration from XmlDocument v2. E.g. what about providing an editable XPathNavigator over XElement or XDocument
To be continued...