Yes, this complicates the parsing quite a bit: you have to read the element header with attributes into a buffer and keep them there until you're sure there's no changes in the default namespace or namespace prefixes. And when you start reading a name character-by-character you have no idea whether what you're reading is a namespace prefix or the local name, which affects the construction of the lookup table.
The added complexity is in a stark contrast with the namespaceless XML core, where all parsing decisions require a single character lookahead and you can report items as soon as their data is ready. It's interesting to think that a slightly different syntax for namespaces would make these problems non-existent. E.g. if namespace prefixes were at the end of a name (template:xsl) and namespace declarations were standalone elements enclosing the rest of the XML, it could be much simpler.