user18856: Apologies if this question appears to be too vague but I would like to know the key differences between these two clients. 
While WiFiClient comes pre-loaded with Arduino IDE, HttpClient doesn't. Also, to send HTTP commands to a server (XML/JSON), which one to go for?

user69565: As Majenko Said,
WiFiClient is raw in the sense you have to deal with the HTTP protocol stuff yourself, a shot snippet of raw GET request is provided below
  WiFiClient wc;
  wc.print("GET ");
  wc.print(/xml/device_description.xml);
  wc.println(" HTTP/1.1");
  wc.print("Host: ");
  wc.println(selectedDevice->getIp());
  wc.println("Connection: close");  //automatically close Connection
  wc.println("");

each line is terminated with "\r\n", the request is terminated with an empty line
Where as the HttpClient is a library which handle all the low level HTTP protocol stuff and provide simple interface to sent HTTP GET/POST request to any device that support HTTP
HTTPClient http;
http.begin(serverName);
http.addHeader("Content-Type", "text/plain");
int httpResponseCode = http.POST("Hi Sending POST request");
Serial.println(httpResponseCode);
http.end();

To send JSON change the header with the below line
http.addHeader("Content-Type", "application/json");

So the answer is if you want to deal with the low level HTTP protocol use WiFiClient else use HTTPClient

user4143: WiFiClient provides a raw connection to the internet through a WiFi access point (such as your home router).
HttpClient provides a connection to a web server via an existing Client connection, such as a WiFiClient connection.
So the simplest answer to your question

to send HTTP commands to a server (XML/JSON), which one to go for?

is "Use both".
You use WiFiClient to connect to the internet, then you use HttpClient on your WiFiClient connection to communicate with a website.  As it states in the readme on HttpClient's github repository:

Because it expects an object of type Client, you can use it with any of the networking classes that derive from that. Which means it will work with EthernetClient, WiFiClient and GSMClient.

To understand the concept more fully you will first need to understand the OSI 7-Layer Model which is essential reading for anyone doing anything with networking software.

18856: <p>Apologies if this question appears to be too vague but I would like to know the key differences between these two clients. </p>

<p>While WiFiClient comes pre-loaded with Arduino IDE, HttpClient doesn't. Also, to send HTTP commands to a server (XML/JSON), which one to go for?</p>
 69565: <p>As Majenko Said,</p>
<p>WiFiClient is raw in the sense you have to deal with the HTTP protocol stuff yourself, a shot snippet of raw GET request is provided below</p>
<pre><code>  WiFiClient wc;
  wc.print(&quot;GET &quot;);
  wc.print(/xml/device_description.xml);
  wc.println(&quot; HTTP/1.1&quot;);
  wc.print(&quot;Host: &quot;);
  wc.println(selectedDevice-&gt;getIp());
  wc.println(&quot;Connection: close&quot;);  //automatically close Connection
  wc.println(&quot;&quot;);
</code></pre>
<p>each line is terminated with &quot;\r\n&quot;, the request is terminated with an empty line</p>
<p>Where as the HttpClient is a library which handle all the low level HTTP protocol stuff and provide simple interface to sent HTTP GET/POST request to any device that support HTTP</p>
<pre><code>HTTPClient http;
http.begin(serverName);
http.addHeader(&quot;Content-Type&quot;, &quot;text/plain&quot;);
int httpResponseCode = http.POST(&quot;Hi Sending POST request&quot;);
Serial.println(httpResponseCode);
http.end();
</code></pre>
<p>To send JSON change the header with the below line</p>
<pre><code>http.addHeader(&quot;Content-Type&quot;, &quot;application/json&quot;);
</code></pre>
<p>So the answer is if you want to deal with the low level HTTP protocol use WiFiClient else use HTTPClient</p>
 4143: <p>WiFiClient provides a raw connection to the internet through a WiFi access point (such as your home router).</p>

<p>HttpClient provides a connection to a web server via an existing Client connection, such as a WiFiClient connection.</p>

<p>So the simplest answer to your question</p>

<blockquote>
  <p>to send HTTP commands to a server (XML/JSON), which one to go for?</p>
</blockquote>

<p>is "Use both".</p>

<p>You use WiFiClient to connect to the internet, then you use HttpClient on your WiFiClient connection to communicate with a website.  As it states in the readme on HttpClient's github repository:</p>

<blockquote>
  <p>Because it expects an object of type Client, you can use it with any of the networking classes that derive from that. Which means it will work with EthernetClient, WiFiClient and GSMClient.</p>
</blockquote>

<p>To understand the concept more fully you will first need to understand the <a href="https://en.wikipedia.org/wiki/OSI_model" rel="noreferrer">OSI 7-Layer Model</a> which is essential reading for anyone doing anything with networking software.</p>
