Перенесенные данные с помощью XML не импортируются в узлы


Ссылка на мой предыдущий вопрос, в котором содержится информация о структуре данных и т.д.

Теперь я прочитал свой XML в Migrate и правильно настроил тип контента и поля (я думаю), но теперь я не могу сохранить узлы. Импорт содержит правильное количество узлов, но они никогда не импортируются. В примерах wine в документации ничего не говорилось об использовании prepareRow() или о чем-либо еще, когда вы используете XML. Где мои узлы? Могу ли я извлечь эти данные с помощью Представления, даже если узлы не импортируются? Мое конечное использование для этого - упорядочить все с помощью представлений.

РЕДАКТИРОВАТЬ

Вот мой класс:

<?php

class ItemNodeMigration extends XMLMigration {
public function __construct() {
parent::__construct(MigrateGroup::getInstance('itemnode', array('default')));
$this->description = t('Grab data in XML');

// There isn't a consistent way to automatically identify appropriate "fields"
// from an XML feed, so we pass an explicit list of source fields
$fields = array(
   'id' => 'ID',
   'type' => t('Description of producer'),
   'Owner' => t('Owner'),
   'Text' => t('Text'),
   'modifiedAt' => 'Date last changed',
);

$this->map = new MigrateSQLMap($this->machineName,
  array(
    'id' => array(
      'type' => 'varchar',
      'length' => 6,
      'not null' => TRUE,
    )
  ),
  MigrateDestinationNode::getKeySchema()
);

// This can also be an URL instead of a file path.
$xml_folder = 'http://example.com/item/';
$list_url = 'http://example.com/CompanyID/Items.xml';
// Each ID retrieved from the list URL will be plugged into :id in the
// item URL to fetch the specific objects.
$item_url = $xml_folder . ':id/desc.xml';

$this->source = new MigrateSourceList(new MigrateListXML($list_url),
  new MigrateItemXML($item_url), $fields);

$this->destination = new MigrateDestinationNode('migrate_module_itemnode');

$this->addFieldMapping('id', 'id')
     ->xpath('/@id');
$this->addFieldMapping('body', 'Text')
     ->xpath('/Text');
$this->addFieldMapping('type', 'type')
     ->xpath('/@type');
$this->addFieldMapping('owner', 'Owner')
     ->xpath('/@Owner');
$this->addFieldMapping('created', 'modifiedAt')
     ->xpath('/@modifiedAt');

}
}

ПРАВКА2: Я определил, что моя проблема заключается здесь:

    $this->map = new MigrateSQLMap($this->machineName,
         array(
                 'id' => array(
                 'type' => 'varchar',
                 'length' => 6,
                 'not null' => TRUE,
               )
         ),
         MigrateDestinationNode::getKeySchema()
    );

Это неверно сопоставляется с идентификатором моего источника, который находится в пункте/@id. Как я могу это исправить?

Author: Community, 2013-01-15

1 answers

В соответствии с этой проблемой - Я думаю, вам нужно указать MigrateSourceList, где находятся ваши идентификаторы элементов, в качестве примера (из isssue):

    // As with MigrateSourceMultiItems, this applies where there is not a separate
    // list of IDs to process - the source XML file is entirely self-contained.
    // For the ID path, and xpath for each component, we can use the full xpath
    // syntax as usual. However, the syntax to select the elements that correspond
    // to objects to import is more limited. It must be a fully-qualified path
    // to the element (i.e., /producers/producer rather than just //producer).
//  $item_xpath = '/producers/producer';  // relative to document
    $item_xpath = '/FMPXMLRESULT/RESULTSET/ROW';
//  $item_ID_xpath = 'sourceid';          // relative to item_xpath
    $item_ID_xpath = 'COL[1]/DATA';

    $this->source = new MigrateSourceXML($items_url, $item_xpath, $item_ID_xpath,
      $fields);

В вашем конструкторе есть только 3 значения. Я не очень много занимался миграцией XML (только CSV и SQL). Этот вопрос касается D7 - я думаю, что он должен относиться к D6.

 1
Author: tenken, 2013-01-16 16:19:38