>I believe technically for loops are slightly less efficient, but that doesn't matter with the small number of iterations here and I find this easier to read

I like ZU.xpath as a shortcut and I don't think it really makes that much of a difference in performance as far as we're concerned, but you have to keep in mind that when you call ZU.xpath it calls document.evaluate and then iterates over all of the nodes and places them into an array. Then you re-iterate over the array. So there's some overhead.

Still, I think it looks cleaner and you're not tempted to re-run document.evaluate for something like `if(doc.evaluate(...).iterateNext()) { var it = doc.evaluate(...); while(var a = it.iterateNext()) { ... } }` (I think I've seen that in a couple of translators), which imo is much worse in terms of performance.

Talking about performance though. evaluating xpaths like `//table[@id="table1"]/tr` on the whole document is much less efficient than doing `var table = document.getElementById('table1'); var rows = ZU.xpath(table, './tr');`. But again.. how much of a difference does it make for our work.. idk, but I don't think it's that much. Maybe if we have to write translators for very large XML or HTML files.