public static function XmlFileLoader::convertDomElementToArray

Converts a \DomElement object to a PHP array.

The following rules applies during the conversion:

  • Each tag is converted to a key value or an array if there is more than one "value"
  • The content of a tag is set under a "value" key (<foo>bar</foo>) if the tag also has some nested tags
  • The attributes are converted to keys (<foo foo="bar"/>)
  • The nested-tags are converted to keys (<foo><foo>bar</foo></foo>)

Parameters

\DomElement $element A \DomElement instance:

Return value

array A PHP array

2 calls to XmlFileLoader::convertDomElementToArray()
XmlFileLoader::loadFromExtensions in drupal/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php
Loads from an extension.
XmlFileLoaderTest::testConvertDomElementToArray in drupal/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Loader/XmlFileLoaderTest.php

File

drupal/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php, line 469

Class

XmlFileLoader
XmlFileLoader loads XML files service definitions.

Namespace

Symfony\Component\DependencyInjection\Loader

Code

public static function convertDomElementToArray(\DomElement $element) {
  $empty = true;
  $config = array();
  foreach ($element->attributes as $name => $node) {
    $config[$name] = SimpleXMLElement::phpize($node->value);
    $empty = false;
  }
  $nodeValue = false;
  foreach ($element->childNodes as $node) {
    if ($node instanceof \DOMText) {
      if (trim($node->nodeValue)) {
        $nodeValue = trim($node->nodeValue);
        $empty = false;
      }
    }
    elseif (!$node instanceof \DOMComment) {
      if ($node instanceof \DOMElement && '_services' === $node->nodeName) {
        $value = new Reference($node
          ->getAttribute('id'));
      }
      else {
        $value = static::convertDomElementToArray($node);
      }
      $key = $node->localName;
      if (isset($config[$key])) {
        if (!is_array($config[$key]) || !is_int(key($config[$key]))) {
          $config[$key] = array(
            $config[$key],
          );
        }
        $config[$key][] = $value;
      }
      else {
        $config[$key] = $value;
      }
      $empty = false;
    }
  }
  if (false !== $nodeValue) {
    $value = SimpleXMLElement::phpize($nodeValue);
    if (count($config)) {
      $config['value'] = $value;
    }
    else {
      $config = $value;
    }
  }
  return !$empty ? $config : null;
}