diff --git a/servers/rest_server/includes/RESTServer.inc b/servers/rest_server/includes/RESTServer.inc
index 2d0c66b..018928b 100755
--- a/servers/rest_server/includes/RESTServer.inc
+++ b/servers/rest_server/includes/RESTServer.inc
@@ -455,6 +455,26 @@ class RESTServer {
     return self::contentFromStream($handle);
   }
 
+  public static function parseXML($handle) {
+    $old_error_state = libxml_use_internal_errors(1);
+    libxml_clear_errors();
+    $xml_data = simplexml_load_string(self::contentFromStream($handle));
+
+    if (!$xml_data) {
+      $message = '';
+      $errors = libxml_get_errors();
+      foreach ($errors as $error) {
+        $message .= t('Line @line, Col @column: @message', array('@line' => $error->line, '@column' => $error->column, '@message' => $error->message)) . "\n\n";
+      }
+      libxml_clear_errors();
+      libxml_use_internal_errors($old_error_state);
+      services_error($message, 406);
+    }
+    libxml_use_internal_errors($old_error_state);
+
+    return (array) $xml_data;
+  }
+
   public static function parseJSON($handle) {
     return json_decode(self::contentFromStream($handle), TRUE);
   }
diff --git a/servers/rest_server/rest_server.module b/servers/rest_server/rest_server.module
index 100d022..7c47152 100755
--- a/servers/rest_server/rest_server.module
+++ b/servers/rest_server/rest_server.module
@@ -65,6 +65,8 @@ function rest_server_request_parsers() {
       'application/json' => 'RESTServer::parseJSON',
       'application/vnd.php.serialized' => 'RESTServer::parsePHP',
       'multipart/form-data' => 'RESTServer::parseFile',
+      'application/xml' => 'RESTServer::parseXML',
+      'text/xml' => 'RESTServer::parseXML',
     );
     drupal_alter('rest_server_request_parsers', $parsers);
   }
