XML has mature tooling, and soap in particular is more thoroughly defined. Those are the biggest advantages of XML.
I actually consider the fact that XML is more expressive than the languages used to interact with it a disadvantage. XML has both attributes and children.. And it takes a definition file to know the intended difference. JSON can be mapped to clear objects more easily, even without secondary documentation.
When you're dealing with a foreign service, clear examples of calling a json service with curl are often more clear than wsdl output. And json is much smaller in payload size.
Where soap/XML shine is where you're using complementary tooling for you client and server... Either Java at both ends, or .Net. However, when your consumer is another language there is often a disconnect. Beyond this, if you're using the same tooling, like wcf, you can use json as the transport layer anyway, gaining a much smaller footprint.
Most modern service tooling on the server can mount both JSON and XML end points.. I'd say do both if you can... Otherwise JSON with clear documentation is better.