I recently looked into this question too, and the best option I found was gSOAP, it is very mature and well tested. However, I decided to go a non-SOAP route, which was an option since I'm on both client and server sides. Before using gSOAP, make sure you can live with their license, you may be obliged to release your code or pay them, depending how you use it.
Another option is Apache Axis2/C, though I have no experience with it (I would guess that it has a similar sized footprint to gSOAP). Their client API is here. A tutorial on the client API is here.
If you decide to go the parsed XML route, you might be interested in this SO question (see answers).
You might also checkout boost::spirit for the parsed route. It has the ability to make small, fast, specialized (and general) parsers, if you're comfortable with C++ (they can be written to be reentrant, so a calling them through a static object with an extern "C" interface is kosher). I can vouch for it in the general sense (not specific to XML). Steep learning curve, but big payoff.