You are here

class SimpleXml in Migrate Plus 8.5

Same name and namespace in other branches
  1. 8.2 src/Plugin/migrate_plus/data_parser/SimpleXml.php \Drupal\migrate_plus\Plugin\migrate_plus\data_parser\SimpleXml
  2. 8.3 src/Plugin/migrate_plus/data_parser/SimpleXml.php \Drupal\migrate_plus\Plugin\migrate_plus\data_parser\SimpleXml
  3. 8.4 src/Plugin/migrate_plus/data_parser/SimpleXml.php \Drupal\migrate_plus\Plugin\migrate_plus\data_parser\SimpleXml

Obtain XML data for migration using the SimpleXML API.

Plugin annotation


@DataParser(
  id = "simple_xml",
  title = @Translation("Simple XML")
)

Hierarchy

Expanded class hierarchy of SimpleXml

File

src/Plugin/migrate_plus/data_parser/SimpleXml.php, line 16

Namespace

Drupal\migrate_plus\Plugin\migrate_plus\data_parser
View source
class SimpleXml extends DataParserPluginBase {
  use XmlTrait;

  /**
   * Array of matches from item_selector.
   *
   * @var array
   */
  protected $matches = [];

  /**
   * {@inheritdoc}
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition) {
    parent::__construct($configuration, $plugin_id, $plugin_definition);

    // Suppress errors during parsing, so we can pick them up after.
    libxml_use_internal_errors(TRUE);
  }

  /**
   * {@inheritdoc}
   */
  protected function openSourceUrl($url) {

    // Clear XML error buffer. Other Drupal code that executed during the
    // migration may have polluted the error buffer and could create false
    // positives in our error check below. We are only concerned with errors
    // that occur from attempting to load the XML string into an object here.
    libxml_clear_errors();
    $xml_data = $this
      ->getDataFetcherPlugin()
      ->getResponseContent($url);
    $xml = simplexml_load_string(trim($xml_data));
    foreach (libxml_get_errors() as $error) {
      $error_string = self::parseLibXmlError($error);
      throw new MigrateException($error_string);
    }
    $this
      ->registerNamespaces($xml);
    $xpath = $this->configuration['item_selector'];
    $this->matches = $xml
      ->xpath($xpath);
    return TRUE;
  }

  /**
   * {@inheritdoc}
   */
  protected function fetchNextRow() {
    $target_element = array_shift($this->matches);

    // If we've found the desired element, populate the currentItem and
    // currentId with its data.
    if ($target_element !== FALSE && !is_null($target_element)) {
      foreach ($this
        ->fieldSelectors() as $field_name => $xpath) {
        foreach ($target_element
          ->xpath($xpath) as $value) {
          if ($value
            ->children() && !trim((string) $value)) {
            $this->currentItem[$field_name] = $value;
          }
          else {
            $this->currentItem[$field_name][] = (string) $value;
          }
        }
      }

      // Reduce single-value results to scalars.
      foreach ($this->currentItem as $field_name => $values) {
        if (is_array($values) && count($values) == 1) {
          $this->currentItem[$field_name] = reset($values);
        }
      }
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DataParserPluginBase::$activeUrl protected property Index of the currently-open url.
DataParserPluginBase::$currentId protected property Value of the ID for the current item when iterating.
DataParserPluginBase::$currentItem protected property Current item when iterating.
DataParserPluginBase::$dataFetcher protected property The data retrieval client.
DataParserPluginBase::$itemSelector protected property String indicating how to select an item's data from the source.
DataParserPluginBase::$urls protected property List of source urls.
DataParserPluginBase::count public function
DataParserPluginBase::create public static function
DataParserPluginBase::current public function
DataParserPluginBase::fieldSelectors protected function Return the selectors used to populate each configured field.
DataParserPluginBase::getDataFetcherPlugin public function Returns the initialized data fetcher plugin.
DataParserPluginBase::key public function
DataParserPluginBase::next public function Implementation of Iterator::next().
DataParserPluginBase::nextSource protected function Advances the data parser to the next source url. 1
DataParserPluginBase::rewind public function 1
DataParserPluginBase::valid public function
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
SimpleXml::$matches protected property Array of matches from item_selector.
SimpleXml::fetchNextRow protected function Retrieves the next row of data. populating currentItem. Overrides DataParserPluginBase::fetchNextRow
SimpleXml::openSourceUrl protected function Opens the specified URL. Overrides DataParserPluginBase::openSourceUrl
SimpleXml::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides DataParserPluginBase::__construct
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
XmlTrait::parseLibXmlError public static function Parses a LibXMLError to a error message string.
XmlTrait::registerNamespaces protected function Registers the iterator's namespaces to a SimpleXMLElement.