Welcome to MSDN Blogs Sign in | Join | Help

Marcelo's WebLog

Improving the world one entity at a time
Fast XmlDocument to XDocument conversion with extension method

Really just a variation based on Kris' comment on my previous XmlDocument to XDocument conversion post.

So if we like the reader option, what is a convenient way of encapsulating that? Well C# 3 extension methods aren't too bad.

Here is one way of writing the methods.

public static class XmlDocumentExtensions
{
 
public static XDocument ToXDocument(this XmlDocument document)
  {
   
return document.ToXDocument(LoadOptions.None);
  }

 
public static XDocument ToXDocument(this XmlDocument document, LoadOptions options)
  {
   
using (XmlNodeReader reader = new XmlNodeReader(document))
    {
     
return XDocument.Load(reader, options);
    }
  }
}

Now, as long as the class is visible to the code you're writing, you can write code like this.

XmlDocument doc = new XmlDocument();
doc.LoadXml(
"<parent><child>text</child></parent>");

XDocument
xdoc = doc.ToXDocument();
var children = xdoc.Document.Element("parent").Elements("child");
foreach (var child in children)
{
 
Console.WriteLine(child.Value);
}

Of course, if you could you would just start off from an XDocument - this addresses the cases where you already have an XmlDocument around and you can't just change all code to use XmlDocument.

One thing that I like about extension methods is that it helps bridge dependencies across libraries in a clean way. More on this on some later post.

Enjoy!

Posted: Tuesday, March 17, 2009 2:00 PM by marcelolr

Comments

No Comments

New Comments to this post are disabled
Page view tracker