private function XmlEncoder::parseXml

Parse the input SimpleXmlElement into an array.

Parameters

SimpleXmlElement $node xml to parse:

Return value

array

1 call to XmlEncoder::parseXml()
XmlEncoder::decode in drupal/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/XmlEncoder.php
Decodes a string into PHP data

File

drupal/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/XmlEncoder.php, line 220

Class

XmlEncoder
Encodes XML data

Namespace

Symfony\Component\Serializer\Encoder

Code

private function parseXml($node) {
  $data = array();
  if ($node
    ->attributes()) {
    foreach ($node
      ->attributes() as $attrkey => $attr) {
      $data['@' . $attrkey] = (string) $attr;
    }
  }
  foreach ($node
    ->children() as $key => $subnode) {
    if ($subnode
      ->count()) {
      $value = $this
        ->parseXml($subnode);
    }
    elseif ($subnode
      ->attributes()) {
      $value = array();
      foreach ($subnode
        ->attributes() as $attrkey => $attr) {
        $value['@' . $attrkey] = (string) $attr;
      }
      $value['#'] = (string) $subnode;
    }
    else {
      $value = (string) $subnode;
    }
    if ($key === 'item') {
      if (isset($value['@key'])) {
        $data[(string) $value['@key']] = $value['#'];
      }
      else {
        $data['item'][] = $value;
      }
    }
    elseif (array_key_exists($key, $data)) {
      if (false === is_array($data[$key]) || false === isset($data[$key][0])) {
        $data[$key] = array(
          $data[$key],
        );
      }
      $data[$key][] = $value;
    }
    else {
      $data[$key] = $value;
    }
  }
  return $data;
}