Emitting XML via LINQ

Just posted about reading XML via LINQ. Now, this post is about the opposite direction - emitting XML from a collection. The simplicity of LINQ provides a straightforward interaction with XML makes LINQ to XML for me one of the easiest and most natural ways to interact with XML.

The following emits a collection of objects out to an XElement (which can be streamed elsewhere as required.

   35 Customer[] customers = new Customer[]{

   36    new Customer{

   37     firstName="john", lastName="lennon"},

   38    new Customer{

   39       firstName="ringo", lastName="starr"} };

   40 

   41 XNamespace ns1 = "UGLY_NAMESPACE";

   42 

   43 XElement custs = new XElement("myRoot",

   44 from c in customers

   45  select new XElement(ns1 + "customer",

   46   new XElement(ns1 + "firstName", c.firstName),

   47   new XElement(ns1 + "lastName", c.lastName)));

 

 
This creates the following XML

 

    1 <myRoot>
    2   <customer xmlns="UGLY_NAMESPACE">
    3     <firstName>john</firstName>
    4     <lastName>lennon</lastName>
    5   </customer>
    6   <customer xmlns="UGLY_NAMESPACE">
    7     <firstName>ringo</firstName>
    8     <lastName>starr</lastName>
    9   </customer>
   10 </myRoot>