Sure, parsing any document (even ill-formed ones) seems like a good idea, but it will bite you in the future. Such as when you need the processor not to strip whitespace from strings, violating the XML spec.
There are some potential buffer overflows that corrupt the call stack, when converting huge double values into text representation. A buffer size of 32 character is too small. I have replaced the value 32 with _CVTBUFSIZE from stdlib.h.
1) I didn't lose any time with PugXML. Quite the opposite, it saved me a huge amount of time.
2) If I was starting from scratch I would take a look at your parser, but PugXML has been up and running for years in my application and there's no advantage to re-engineering and re-testing my app at this point.