It becomes much less cumbersome if you can use XPath. And in .Net land LINQ to XML abstracts a lot of the less glamorous stuff too. (Edit - these require a DOM approach of course)
Fundamentally, if you are taking a stream based approach (so you can't use nicer abstractions that require a DOM) I think it will always be pretty cumbersome and I'm not sure there is any way around this.