You are here

class ServicesXMLFormatter in Services 7.3

Hierarchy

Expanded class hierarchy of ServicesXMLFormatter

3 string references to 'ServicesXMLFormatter'
rest_server_response_formatters in servers/rest_server/rest_server.module
Builds a list of response formatters that are available to the RESTServer.
ServicesRESTServerTests::getDefaultFactoryArguments in servers/rest_server/tests/ServicesRESTServerTests.test
ServicesRESTServerTests::testRender in servers/rest_server/tests/ServicesRESTServerTests.test
Test for render() method.

File

servers/rest_server/includes/ServicesFormatter.inc, line 46

View source
class ServicesXMLFormatter implements ServicesFormatterInterface {
  public function render($data) {
    $doc = new DOMDocument('1.0', 'utf-8');
    $root = $doc
      ->createElement('result');
    $doc
      ->appendChild($root);
    $this
      ->xml_recursive($doc, $root, $data);
    return $doc
      ->saveXML();
  }
  private function xml_recursive(&$doc, &$parent, $data) {
    if (is_object($data)) {
      $data = get_object_vars($data);
    }
    if (is_array($data)) {
      $assoc = FALSE || empty($data);
      foreach ($data as $key => $value) {
        if (is_numeric($key)) {
          $key = 'item';
        }
        else {
          if (empty($key)) {
            continue;
          }
          else {
            $assoc = TRUE;
            $key = preg_replace('/[^A-Za-z0-9_]/', '_', $key);
            $key = preg_replace('/^([0-9]+)/', '_$1', $key);
          }
        }
        $element = $doc
          ->createElement($key);
        $parent
          ->appendChild($element);
        $this
          ->xml_recursive($doc, $element, $value);
      }
      if (!$assoc) {
        $parent
          ->setAttribute('is_array', 'true');
      }
    }
    elseif ($data !== NULL) {
      $parent
        ->appendChild($doc
        ->createTextNode($data));
    }
  }

}

Members