 <p>I would just use LINQ to XML in the simplest possible way:</p> <pre><code>var query = from file in files let doc = XDocument.Load(file) from customer in doc.Descendants("Customer") select new { Company = (string) customer.Element("Company"), Ship = (string) customer.Element("Ship") }; </code></pre> <p>I'd expect that to be pretty quick already - but you should work out what your exact performance requirements are, then test them. (You almost certainly don't need "the most efficient" way - you need a <em>sufficiently</em> efficient way, whilst keeping the code readable.)</p> <p>Note that if you want the values to be propagated out of the current method, you should create your own class to represent the company/ship pair.</p>