You are here

function atomrdf_custom_copy in Feeds Atom 6

Same name and namespace in other branches
  1. 7 libraries/atomrdf_parser.inc \atomrdf_custom_copy()
1 call to atomrdf_custom_copy()
atomrdf_parse in libraries/atomrdf_parser.inc
Parse AtomRDF format - for example:

File

libraries/atomrdf_parser.inc, line 330
Contains the atomrd parsing functions.

Code

function atomrdf_custom_copy($xml) {
  $blob = array();
  foreach ($xml
    ->children() as $xml_child) {
    $key = $xml_child
      ->getName();
    if ($key == "field") {

      // The name 'field-instance' has a dash in it! So we are trying to get it without referring to it.
      // @todo This can easily be done with the xpath() method, or with $xml_child->{'field-instance'}
      $i = 0;
      $values = array();

      // Each field instance is a value of possible multi values
      foreach ($xml_child
        ->children() as $field_instance) {
        $values[$i] = array();

        // each column makes up information for the value
        foreach ($field_instance
          ->children() as $column) {
          $attributes = $column
            ->attributes();
          if (!empty($attributes['name'])) {
            $name = (string) $attributes['name'];
            $value = (string) $column;
            if (!empty($attributes['serialize'])) {
              $value = unserialize($value);
            }
            $values[$i][$name] = $value;
          }
        }
        $i++;
      }
      $key = "{$xml_child['name']}";
      $blob[$key] = $values;
      $blob[$key]['#attributes'] = array(
        'type' => (string) $xml_child['type'],
      );
    }
    elseif ($key == "properties") {

      // Save properties from the properties block
      foreach ($xml_child
        ->children() as $property) {
        $key = "{$property->getName()}";
        $value = "{$property}";
        $blob[$key] = $value;
      }
    }
    elseif ($key == 'taxonomy') {
      foreach ($xml_child
        ->children() as $term) {
        $values = array();
        foreach ($term as $data_type => $value) {
          $values[$data_type] = "{$value}";
        }
        $blob[$key][] = $values;
      }
    }
    else {

      // There are some 'naked' properties that are not inside of the properties or fields block - save those.
      $value = "{$xml_child}";
      $blob[$key] = $value;
    }
  }

  // Invokes hook_feeds_atom_atomrdf_parser_alter().
  drupal_alter('feeds_atom_atomrdf_parser', $blob, $xml);
  return $blob;
}