. */ namespace SP\Domain\Import\Services; use DOMDocument; use DOMElement; use Iterator; use SP\Core\Application; use SP\Domain\Config\Ports\ConfigDataInterface; use SP\Domain\Core\Crypt\CryptInterface; use SP\Domain\Import\Ports\ImportHelperInterface; /** * Class XmlImportBase * * @package SP\Domain\Import\Services */ abstract class XmlImportBase extends ImportBase { protected readonly ConfigDataInterface $configData; /** * ImportBase constructor. */ public function __construct( Application $application, ImportHelperInterface $importHelper, CryptInterface $crypt, protected readonly DOMDocument $document ) { parent::__construct($application, $importHelper, $crypt); $this->configData = $application->getConfig()->getConfigData(); } /** * Get data from child nodes * * @param string $nodeName Parent node name * @param string $childNodeName Child node name * * @return iterable */ protected function getNodesData(string $nodeName, string $childNodeName): iterable { /** @var Iterator $outerNodeList */ $outerNodeList = $this->document->getElementsByTagName($nodeName)->getIterator(); foreach ($outerNodeList as $outerNode) { /** @var Iterator $innerNodeList */ $innerNodeList = $outerNode->getElementsByTagName($childNodeName)->getIterator(); foreach ($innerNodeList as $innerNode) { yield $innerNode; } } } }