diff --git a/migrate_example_advanced/config/install/migrate_plus.migration.wine_variety_multi_xml.yml b/migrate_example_advanced/config/install/migrate_plus.migration.wine_variety_multi_xml.yml
index 4fad49feadd098457a65b196b07200f0726d5f52..e35e8ca94667b08c94fa6d1ba566766941c88eeb 100755
--- a/migrate_example_advanced/config/install/migrate_plus.migration.wine_variety_multi_xml.yml
+++ b/migrate_example_advanced/config/install/migrate_plus.migration.wine_variety_multi_xml.yml
@@ -37,6 +37,10 @@ source:
       name: category_parent
       label: 'Unique position identifier'
       selector: parent
+    -
+      name: category_attributes
+      label: 'List of variety attributes'
+      selector: attributes
   # Under 'ids', we identify source fields populated above which will uniquely
   # identify each imported item. The 'type' makes sure the migration map table
   # uses the proper schema type for stored the IDs.
@@ -53,6 +57,7 @@ process:
     plugin: migration
     migration: wine_terms
     source: category_parent
+  field_variety_attributes: category_attributes
 destination:
   plugin: entity:taxonomy_term
 migration_dependencies:
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/core.entity_form_display.taxonomy_term.migrate_example_wine_varieties.default.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/core.entity_form_display.taxonomy_term.migrate_example_wine_varieties.default.yml
new file mode 100644
index 0000000000000000000000000000000000000000..32bd692441309e9b7a349375d42002306cb3add6
--- /dev/null
+++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/core.entity_form_display.taxonomy_term.migrate_example_wine_varieties.default.yml
@@ -0,0 +1,41 @@
+langcode: en
+status: true
+dependencies:
+  config:
+    - field.field.taxonomy_term.migrate_example_wine_varieties.field_variety_attributes
+    - taxonomy.vocabulary.migrate_example_wine_varieties
+  module:
+    - path
+    - text
+id: taxonomy_term.migrate_example_wine_varieties.default
+targetEntityType: taxonomy_term
+bundle: migrate_example_wine_varieties
+mode: default
+content:
+  description:
+    type: text_textarea
+    weight: 1
+    settings:
+      placeholder: ''
+      rows: 5
+    third_party_settings: {  }
+  field_variety_attributes:
+    type: string_textfield
+    weight: 3
+    settings:
+      size: 60
+      placeholder: ''
+    third_party_settings: {  }
+  name:
+    type: string_textfield
+    weight: 0
+    settings:
+      size: 60
+      placeholder: ''
+    third_party_settings: {  }
+  path:
+    type: path
+    weight: 2
+    settings: {  }
+    third_party_settings: {  }
+hidden: {  }
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/core.entity_view_display.taxonomy_term.migrate_example_wine_varieties.default.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/core.entity_view_display.taxonomy_term.migrate_example_wine_varieties.default.yml
new file mode 100644
index 0000000000000000000000000000000000000000..b475708a770e09d2be7011a98df1c76ac8ff96d0
--- /dev/null
+++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/core.entity_view_display.taxonomy_term.migrate_example_wine_varieties.default.yml
@@ -0,0 +1,27 @@
+langcode: en
+status: true
+dependencies:
+  config:
+    - field.field.taxonomy_term.migrate_example_wine_varieties.field_variety_attributes
+    - taxonomy.vocabulary.migrate_example_wine_varieties
+  module:
+    - text
+id: taxonomy_term.migrate_example_wine_varieties.default
+targetEntityType: taxonomy_term
+bundle: migrate_example_wine_varieties
+mode: default
+content:
+  description:
+    label: hidden
+    type: text_default
+    weight: 0
+    settings: {  }
+    third_party_settings: {  }
+  field_variety_attributes:
+    type: string
+    weight: 0
+    label: inline
+    settings:
+      link_to_entity: false
+    third_party_settings: {  }
+hidden: {  }
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.field.taxonomy_term.migrate_example_wine_varieties.field_variety_attributes.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.field.taxonomy_term.migrate_example_wine_varieties.field_variety_attributes.yml
new file mode 100644
index 0000000000000000000000000000000000000000..7164459f81accbf623fa72a338d55dce727dce53
--- /dev/null
+++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.field.taxonomy_term.migrate_example_wine_varieties.field_variety_attributes.yml
@@ -0,0 +1,18 @@
+langcode: en
+status: true
+dependencies:
+  config:
+    - field.storage.taxonomy_term.field_variety_attributes
+    - taxonomy.vocabulary.migrate_example_wine_varieties
+id: taxonomy_term.migrate_example_wine_varieties.field_variety_attributes
+field_name: field_variety_attributes
+entity_type: taxonomy_term
+bundle: migrate_example_wine_varieties
+label: Attributes
+description: ''
+required: false
+translatable: false
+default_value: {  }
+default_value_callback: ''
+settings: {  }
+field_type: string
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.taxonomy_term.field_variety_attributes.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.taxonomy_term.field_variety_attributes.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e5db23f204055512883dd301d053cc4b02fdb62e
--- /dev/null
+++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.taxonomy_term.field_variety_attributes.yml
@@ -0,0 +1,20 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - taxonomy
+id: taxonomy_term.field_variety_attributes
+field_name: field_variety_attributes
+entity_type: taxonomy_term
+type: string
+settings:
+  max_length: 255
+  is_ascii: false
+  case_sensitive: false
+module: core
+locked: false
+cardinality: -1
+translatable: true
+indexes: {  }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/src/Plugin/rest/resource/VarietyMultiFiles.php b/migrate_example_advanced/migrate_example_advanced_setup/src/Plugin/rest/resource/VarietyMultiFiles.php
index cd126478f4636380f40b78cc547cb722c0b03b3b..e882b92602c980e553d415110b5fcd122eaef8f9 100644
--- a/migrate_example_advanced/migrate_example_advanced_setup/src/Plugin/rest/resource/VarietyMultiFiles.php
+++ b/migrate_example_advanced/migrate_example_advanced_setup/src/Plugin/rest/resource/VarietyMultiFiles.php
@@ -39,11 +39,19 @@ class VarietyMultiFiles extends ResourceBase {
         'name' => 'Amarone',
         'parent' => 3,  // categoryid for 'red'.
         'details' => 'Italian Venoto region',
+        'attributes' => [
+          'rich',
+          'aromatic',
+        ],
       ];
       $data['variety'][] = [
         'name' => 'Barbaresco',
         'parent' => 3,  // categoryid for 'red'.
         'details' => 'Italian Piedmont region',
+        'attributes' => [
+          'smoky',
+          'earthy',
+        ],
       ];
     }
     if (strtolower($type) != 'red') {
@@ -51,11 +59,17 @@ class VarietyMultiFiles extends ResourceBase {
         'name' => 'Kir',
         'parent' => 1,  // categoryid for 'white'.
         'details' => 'French Burgundy region',
+        'attributes' => [],
       ];
       $data['variety'][] = [
         'name' => 'Pinot Grigio',
         'parent' => 1,  // categoryid for 'white'.
         'details' => 'From the northeast of Italy',
+        'attributes' => [
+          'fruity',
+          'medium-bodied',
+          'slightly sweet',
+        ],
       ];
     }
 
diff --git a/src/Plugin/migrate_plus/data_parser/Xml.php b/src/Plugin/migrate_plus/data_parser/Xml.php
index 65f1bab1e0f25f4ae45f9ed14da423bbba636701..a60d6df415c7690b5104d7a441885d6cc5c8150f 100644
--- a/src/Plugin/migrate_plus/data_parser/Xml.php
+++ b/src/Plugin/migrate_plus/data_parser/Xml.php
@@ -225,7 +225,13 @@ class Xml extends DataParserPluginBase implements ContainerFactoryPluginInterfac
     if ($target_element) {
       foreach ($this->fieldSelectors() as $field_name => $xpath) {
         foreach ($target_element->xpath($xpath) as $value) {
-          $this->currentItem[$field_name] = (string) $value;
+          $this->currentItem[$field_name][] = (string) $value;
+        }
+      }
+      // Reduce single-value results to scalars.
+      foreach ($this->currentItem as $field_name => $values) {
+        if (count($values) == 1) {
+          $this->currentItem[$field_name] = reset($values);
         }
       }
     }