(Summary: XML is an ex markup language.)
C was designed to allow programming: it is a general programming language. SGML was designed to allow marking up: it is a generalized markup language. C was not designed with marking up in mind (by Ritchie et al); SGML was not design with programming in mind (by Goldfarb et al.). (In fact, because C was designed to allow the implementation of a timeshared system for people (secretaries?) to use for preparing documents using specific markup.)
Their subset descendent dialects were designed to allow a subset of those goals: JSon via Ecmacsipt allowed a squinty subset of C thought necessary for data transfer between internet processes; XML allowed a squinty subset of SGML thought necessary for data interchange between internet processes. They are the subsets of very different approaches for use in similar scenarios.
They are both data interchange syntaxes. JSON does not have any marking up DNA and XML does not have any programming DNA. You use a philips head screwdriver when your screws have philips heads; you use a flat blade screwdriver when you have flat blade screws. But JSON is so subsetted compared to C/ECMAScript that it is not a programming language at all despite its DNA (not a crticism), and XML is so subsetted from SGML that it is only functional as a markup language with effort.
XML is a markup language by DNA but it is not really a syntax good for marking up documents with, meaning the activity of marking up not the result: contrast with HTML which retains tag and delimiter omission a la SGML. Which is why, for marking up (as an activity), the world uses HTML or wiki. I dont think choice is a bad thing: html, wiki, csv, json when the scenerio clearly suits them and xml otherwise.
Cheers
Rick