The best way is not to join the XML files at all, unless you actually need the data in XML format.
There is no way to join the XML files as they are, so you would have to parse both files, join the data, and then create a new XML file from that. I assume that you are just after the data, so the last step would be superflous.
You can for example use LINQ to XML to get the data from the XML files and join it. Example:
XElement contacts = XElement.Parse(contactsXml);
XElement clients = XElement.Parse(clientsXml);
var contactsWithClients =
from contact in contacts.Elements("Contact")
join client in clients.Elements("Client")
on contact.Attribute("ClientId").Value equals client.Attribute("Id").Value
into grp
select new {
ContactName = contact.Attribute("Name").Value,
ClientName = grp.Single().Attribute("Name").Value
};