Ok, from your last comment above, I think I know what you want. (It isn't either of the interpretations that I
thought you wanted.)
First your XPath expression was off by a bit.
Then you just needed to copy the elements and Add them to the Sam element.
XDocument doc = XDocument.Load(filePath);
IEnumerable<XElement> Ad = doc.XPathSelectElements("/Contact/Address/*");
var sam = doc.XPathSelectElement("/Contact/Sam");
foreach (var item in Ad)
{
var newItem = new XElement(item);
sam.Add(newItem);
}
At this point
doc
is:
<contact>
<Name>Patrick Hines</Name>
<Phone>206-555-0144</Phone>
<Address>
<Street1>123 Main St</Street1>
<City>
<city w:st="on">
<place w:st="on">Mercer Island</place>
</city>
</City>
<State>WA</State>
<Postal>68042</Postal>
</Address>
<Date>
<FirstDate>7/23/2011</FirstDate>
<LastDate>6/20/2012</LastDate>
</Date>
<Sam>
<Street1>123 Main St</Street1>
<City>
<city w:st="on">
<place w:st="on">Mercer Island</place>
</city>
</City>
<State>WA</State>
<Postal>68042</Postal>
</Sam>
</Contact>
An additional comment: This XML design is not ideal in that it is easy for humans to mis-read it, due to the <City> and <city> that differ only by the case of the first letter.
If you can, I'd suggest redesigning this for better readability.