using System.Collections.Generic;
using System.Xml.Serialization;
using System.Diagnostics;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Text.RegularExpressions;
using System.Globalization;
using System.Collections;
static string GetRootXml()
var xml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
<message message_id=""1005"" message_dt=""01/21/2008 09:50:23.221 AM"" message_type=""Work_Request"" message_sub_type=""New"" message_dtd_version_number=""2.0"">
<from_application_id>3367e115-c873-4ac9-a1dd-7e45231dc3d5</from_application_id>
<to_application_id>35e0cca2-e423-4ffe-ba07-7d056775c228</to_application_id>
<work_request requisition_number=""REQ44"">
<client client_id=""44"">
<first_name>Foo</first_name>
<last_name>Bar</last_name>
<patient patient_id=""4444"" patient_species=""CANINE"" patient_gender=""MALE_INTACT"">
<patient_name>Bo</patient_name>
<patient_breed>Portuguese Water Dog</patient_breed>
<first_name>Surgeon</first_name>
<last_name>General</last_name>
static string GetNestedXml()
var xml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
<service_cd>ALB</service_cd>
<service_cd>GLU</service_cd>
<service_cd>BUN</service_cd>
public static void Test()
var doc = new XmlDocument();
doc.LoadXml(GetRootXml());
Console.WriteLine("Original XML: ");
Console.WriteLine(doc.ToXml());
var xmlElement = doc.SelectSingleNode("//work_request");
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(GetNestedXml())))
using (var reader = XmlReader.Create(stream))
var fragment = xmlElement.OwnerDocument.CreateDocumentFragment();
using (var writer = fragment.CreateNavigator().AppendChild())
writer.WriteNode(reader, true);
foreach (var child in fragment.ChildNodes.OfType<XmlElement>().ToList())
xmlElement.AppendChild(child);
Console.WriteLine("Modified XML with <service_add> element added: ");
Console.WriteLine(doc.ToXml());
public static void Main()
public static class XmlDocumentExtensions
public static string ToXml(this XmlDocument xDoc)
using (TextWriter writer = new StringWriter())
return writer.ToString();