Como migrar conteúdo de arquivos XML para Drupal 8 (ou 9)

Publicados: 2021-10-05

Extrair dados de diferentes fontes para o seu CMS Drupal é o objetivo da migração. Sua fonte de migração pode ser qualquer coisa – um banco de dados, outro CMS, CSV, arquivos XML. O Drupal sempre oferece a flexibilidade de migrar dados de qualquer lugar para o CMS. Já escrevemos extensivamente sobre migrações do Drupal antes, como migrar de uma fonte de banco de dados, migrar conteúdo multilíngue de CSV, de uma fonte SQL, um guia completo de instruções para migrações e muito mais! Se você está procurando um guia para migrar dados de arquivos XML para Drupal 8 ou Drupal 9, você chegou ao lugar certo, pois é sobre isso que vamos discutir aqui!

Se você deseja importar feeds externos para o seu site Drupal 9 usando o módulo Drupal Feeds, confira este artigo.

Migração de XML para Drupal

Módulos de migração Drupal 8/9

Aqui, usaremos todo o conjunto de módulos de migração do Drupal

  • Migrar
  • Migrar Drupal
  • Migrar mais
  • Ferramentas de migração

Após instalar esses módulos, você precisará criar um módulo personalizado onde escreverá o script para migração. Então, primeiro, crie um módulo personalizado e, em seguida, crie um info.yml que incluirá os detalhes do módulo. Em seguida, habilite o módulo.

 name: test migration type: module description: Migrating data from the csv files. core_version_requirement: ^8 || ^9 package: Migration dependencies: - drupal:migrate_source_csv - drupal:migrate_plus - drupal:migrate_tools config_devel: install: - migrate_plus.migration_group.test_migration - migrate_plus.migration.test_migration_sessions - migrate_plus.migration.test_migration_paper - migrate_plus.migration.test_migration_user

Depois que o arquivo info.yml for criado, você precisará criar um grupo de migração para essa migração. Você precisará criar este grupo de migração no caminho: test_migration> config > install . Estes detalhes são necessários durante a execução da migração:

 id: test_migration label: test Migration description: Migrating xml data

Depois de criar o grupo de migração, instale esse grupo em seu arquivo info.yml.

 config_devel: install: - migrate_plus.migration_group.test_migration

Agora, você precisa escrever um script de migração para o tipo de conteúdo. Este script deve estar dentro de config > install e o nome do arquivo deve ser migrate_plus.migration.test_migration_paper.yml

 id: test_migration_paper label: 'Migrate Paper data from the xml file' migration_group: test_migration source: plugin: url # Full path to the file. data_fetcher_plugin: file data_parser_plugin: xml urls: private://xml/session.xml item_selector: /program/session/papers/paper fields: - name : title lable : 'Paper title' selector : papertitle - name : abstract lable : 'Paper abstract' selector : abstract - name : first_name label : 'Author first name' selector : authors/author/name/givenname - name : last_name label : 'Author last name' selector : authors/author/name/surname - name : paper_id label : 'Paper identifier' selector : paperid - name : session_id label : 'Session identifier' selector : sessionid - name : start_time label : 'Paper presentation start time' selector : starttime - name : end_time label : 'Paper presentation end time' selector : endtime - name : author_name label : 'Author name' selector : authors/author/name/fullname - name : session lable : 'Session name' selector : session ids: session_id : type : string process : # Adding the mapping between the fields and the csv columns. title : - plugin : skip_on_empty method : process source : title field_abstract/value : abstract field_abstract/format : plugin : default_value default_value : "full_html" field_presentation_timing/value : plugin : format_date from_format : 'Ymd\TH:i:s' to_format : 'Ymd\TH:i:s' source : start_time field_presentation_timing/end_value : plugin : format_date from_format : 'Ymd\TH:i:s' to_format : 'Ymd\TH:i:s' source : end_time field_paper_identifier : paper_id field_session_identifier : session_id field_author : - plugin : skip_on_empty method : process source : author_name - plugin : paper_user_migration_import_process no_stub : true field_session : - plugin : skip_on_empty method : process source : session - plugin : node_migration_import_process no_stub : true destination : plugin : 'entity:node' default_bundle : paper migration_dependencies : required : { } dependencies : { }
Rótulo do anúncio

  • id : será exclusivo para cada arquivo yaml e exibido na lista de migração.
  • label : conterá a descrição da migração.
  • migration_group : Este é o grupo principal que contém todas as migrações.
  • source : contém todos os detalhes de origem para esta migração.
  • urls : conterá o arquivo para migração. No código acima, a fonte é colocada dentro do diretório privado.
  • item_selector : O seletor de item é o caminho do qual todo o conjunto de dados é obtido. Basicamente dentro desta tag deve haver um conjunto de dados.
  • fields : Aqui estamos atribuindo valores de tag a algumas variáveis.
  • name : que dá nomes de variáveis.
  • label : Uma breve descrição.
  • selector : no qual estamos informando qual valor de tag deve ser atribuído à variável.
  • ids : que deve ser exclusivo para cada conteúdo.
  • processo : no qual estamos mapeando nomes de máquinas de variáveis ​​e campos.
  • destination : No qual estamos mencionando o nome da entidade para a qual os dados devem ser migrados.

Com base em seus dados, agora você também pode escrever plugins para migração. O plugin de código acima foi escrito para o campo field_author .

Depois disso vá para Estrutura , lá você verá Migração - clique nela. Agora você pode ver todos os grupos de migração.

Adicionar grupo de migração

Clique em Migração de lista . Lá você pode ver a lista de migração yaml que criamos.

Dados em papel

Clique no botão Executar . Você pode ver as opções de migração.

Operação de importação

Aqui você pode executar qualquer opção que desejar:

  • Importar: Isso migrará os dados.
  • Rollback: reverterá todos os dados migrados.
  • Parar: Parará a migração no meio do processo.
  • Redefinir: Mudará o status para um estado ocioso.

Você também pode migrar o conteúdo pelo terminal com esses comandos drush.

  • drush ms - Status da migração
  • drush mim <migration_id> - Importação de migração
  • drush mr <migration_id> - reversão de migração
  • drush sra <migration_id> - Para tornar o status de migração inativo.