I finally realized why I was being stupid about how I was testing HTML and XML. The realization was so blindingly obvious that, in retrospect, I'm embarrased that I didn't appreciate it before. You see, if you squint, HTML and XML documents are instances of objects. I don't care about the whitespace, the attribute order, or if the nav links are at the top, bottom, left, etc. What I care about is the information these documents present and the things I can do with them.
When I test an object's API, I shouldn't care if it's implemented with a hashref, inside out objects or RPC calls. I should only care if it does what it promises. Can I click a link and go to the correct page? Does it even have that link? Is the title correct? Those are the things I care about. I'm embarrassed that I've wasted so much time testing rapidly changing internals when the things I really needed to test weren't changing that much.
Realizations like that really hammer home how much I have to learn.