I had to create a quick tool last week that had the simple task of parsing through an XML file and getting a set of atrributes from any node that had a specific value for a different attribute. This is vaguely the equivalent of writing down the license plate numbers of all pickups in a parking garage and ignoring the cars. Sounds simple, but it is always surprising to me how much code I have to write to work with the XML DOM in the .net framework.
Here's what I came up with:
XmlDocument xmlDoc = new XmlDocument(); try { xmlDoc.Load(txtConfigLocation.Text); XmlNodeList myNodeList; actionNodeList = xmlDoc.DocumentElement.SelectNodes("//myAction"); int i = 0; XmlAttributeCollection attrColl; foreach (XmlNode node in myNodeList) { attrColl = node.Attributes; result[i] = attrColl.GetNamedItem("name").Value; i++; } }
catch (Exception e) { System.Windows.Forms.MessageBox.Show(e.ToString(), "Error in GetActionListArray"); result = null; } return result ;
And I'm leaving out the code that sets the path to the Text file and the calling code as well.
That seems to be quite a bit of code just to get some string data out of a file. The trickiest part was the "//" in the SelectNodes command - Xpath needs this to know to search sub nodes. About 20 lines, depending on how you count them, seems like plenty to get this done.
Oh, and I also left out the logging I used to log the results from this.
I've read a little about Linq and how it can help here but I simply have not had time to learn that library. If there is a another small project like this that comes up maybe I can carve out some time to learn that and hopefully will need to write less code in the future.
Anyway, every time I write code using the DOM I always am amazed at how much code results, even in a simple case like this.
Questions, comments, concerns and criticisms always welcome,
John