Commit aa94a699 authored by Ivan Doroshenko's avatar Ivan Doroshenko Committed by Ivan Doroshenko
Browse files

Issue #3112571 by marvil07, Matroskeen: Support xml parsing on dom plugin

parent ce552ed8
Loading
Loading
Loading
Loading
+7 −2
Changes for src/Plugin/migrate/process/Dom.php: 7 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ use Masterminds\HTML5;
 * - import_method: (optional) What parser to use. Possible values:
 *   - 'html': (default) use dom extension parsing.
 *   - 'html5': use html5 parsing.
 *   - 'xml': use XML parsing.
 *
 * @codingStandardsIgnoreStart
 *
@@ -100,8 +101,8 @@ class Dom extends ProcessPluginBase {
      throw new \InvalidArgumentException('The "method" must be "import" or "export".');
    }
    $configuration['import_method'] = $configuration['import_method'] ?? 'html';
    if (!in_array($configuration['import_method'], ['html', 'html5'])) {
      throw new \InvalidArgumentException('The "import_method" must be "html" or "html5".');
    if (!in_array($configuration['import_method'], ['html', 'html5', 'xml'])) {
      throw new \InvalidArgumentException('The "import_method" must be "html", "html5", or "xml".');
    }
    parent::__construct($configuration, $plugin_id, $plugin_definition);
    $this->configuration += $this->defaultValues();
@@ -176,6 +177,10 @@ class Dom extends ProcessPluginBase {
        $html5->loadHTML($html);
        break;

      case 'xml':
        $document->loadXML($html);
        break;

      case 'html':
      default:
        $document->loadHTML($html);
+14 −2
Changes for tests/src/Unit/process/DomTest.php: 14 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -45,11 +45,11 @@ final class DomTest extends MigrateProcessTestCase {
  /**
   * @covers ::__construct
   */
  public function testInvalidImportMethod() {
  public function testInvalidImportMethod(): void {
    $configuration['method'] = 'import';
    $configuration['import_method'] = 'invalid';
    $this->expectException(\InvalidArgumentException::class);
    $this->expectExceptionMessage('The "import_method" must be "html" or "html5".');
    $this->expectExceptionMessage('The "import_method" must be "html", "html5", or "xml".');
    (new Dom($configuration, 'dom', []));
  }

@@ -77,6 +77,18 @@ final class DomTest extends MigrateProcessTestCase {
    $this->assertTrue($document instanceof \DOMDocument);
  }

  /**
   * @covers ::import
   */
  public function testImportMethodXml(): void {
    $configuration['method'] = 'import';
    $configuration['import_method'] = 'xml';
    $value = '<item><value>A simple paragraph.</value></item>';
    $document = (new Dom($configuration, 'dom', []))
      ->transform($value, $this->migrateExecutable, $this->row, 'destinationproperty');
    $this->assertTrue($document instanceof \DOMDocument);
  }

  /**
   * @covers ::import
   */