I never had any particular problems with XML generation using printf(). Yes, results need checking in XMLspy, but it is really not a big deal. Yes, this library assures well-formedness, but it still does not take care of DTD/XSD.
If you are creating large XML documents and lots of them, over the long term, printf() will not serve you well. Genx essentially guarantees well-formedness, is efficient, and will save you steps. For example, if you try to duplicate Genx' task of creating a million elements (see helloMillion.c in the Genx distro) using printf(), you just might be convinced that it is worth it. %^)