<div dir="ltr"><div class="gmail_extra">Have you considered xpath? It's a core feature of all xml engines (msxml, libxml2, whatever else).</div><div class="gmail_extra"><br></div><div class="gmail_extra">Syntax overview:</div><div class="gmail_extra"><br></div><div class="gmail_extra"><a href="http://msdn.microsoft.com/en-us/library/ms256086(v=vs.110).aspx">http://msdn.microsoft.com/en-us/library/ms256086(v=vs.110).aspx</a><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">In my wrapper would look like this:</div><div class="gmail_extra"><br></div><div class="gmail_extra">Person := Document.FindNode('//Person[@Index = "0001"]');</div><div class="gmail_extra"><br></div><div class="gmail_extra">Other examples</div><div class="gmail_extra"><br></div><div class="gmail_extra">// All persons in a city that start with the letter A</div><div class="gmail_extra">  Document.FindNodes('//Person[starts-with(City, "A")]');<br></div><div class="gmail_extra">// Or to processing save time, select the Persons node</div><div class="gmail_extra">  People := Document.FindNode('//Persons');</div><div class="gmail_extra">// And now xpath is evaluated relative to that</div><div class="gmail_extra">  People.FindNode('Person[Name = "Jan"]');</div><div class="gmail_extra"><br></div><div class="gmail_extra">And so on</div></div>