You are here

XmlFileLoader.php in Zircon Profile 8.0

File

vendor/symfony/serializer/Mapping/Loader/XmlFileLoader.php
View source
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
namespace Symfony\Component\Serializer\Mapping\Loader;

use Symfony\Component\Config\Util\XmlUtils;
use Symfony\Component\Serializer\Exception\MappingException;
use Symfony\Component\Serializer\Mapping\AttributeMetadata;
use Symfony\Component\Serializer\Mapping\ClassMetadataInterface;

/**
 * Loads XML mapping files.
 *
 * @author Kévin Dunglas <dunglas@gmail.com>
 */
class XmlFileLoader extends FileLoader {

  /**
   * An array of {@class \SimpleXMLElement} instances.
   *
   * @var \SimpleXMLElement[]|null
   */
  private $classes;

  /**
   * {@inheritdoc}
   */
  public function loadClassMetadata(ClassMetadataInterface $classMetadata) {
    if (null === $this->classes) {
      $this->classes = array();
      $xml = $this
        ->parseFile($this->file);
      foreach ($xml->class as $class) {
        $this->classes[(string) $class['name']] = $class;
      }
    }
    $attributesMetadata = $classMetadata
      ->getAttributesMetadata();
    if (isset($this->classes[$classMetadata
      ->getName()])) {
      $xml = $this->classes[$classMetadata
        ->getName()];
      foreach ($xml->attribute as $attribute) {
        $attributeName = (string) $attribute['name'];
        if (isset($attributesMetadata[$attributeName])) {
          $attributeMetadata = $attributesMetadata[$attributeName];
        }
        else {
          $attributeMetadata = new AttributeMetadata($attributeName);
          $classMetadata
            ->addAttributeMetadata($attributeMetadata);
        }
        foreach ($attribute->group as $group) {
          $attributeMetadata
            ->addGroup((string) $group);
        }
      }
      return true;
    }
    return false;
  }

  /**
   * Parses a XML File.
   *
   * @param string $file Path of file
   *
   * @return \SimpleXMLElement
   *
   * @throws MappingException
   */
  private function parseFile($file) {
    try {
      $dom = XmlUtils::loadFile($file, __DIR__ . '/schema/dic/serializer-mapping/serializer-mapping-1.0.xsd');
    } catch (\Exception $e) {
      throw new MappingException($e
        ->getMessage(), $e
        ->getCode(), $e);
    }
    return simplexml_import_dom($dom);
  }

}

Classes

Namesort descending Description
XmlFileLoader Loads XML mapping files.