Das normierte XML-Format dient dazu, Daten versions- und systemunabhängig auszutauschen. Zu diesem Zweck werden die Daten so normiert, dass sich in der XML-Datei immer derselbe Aufbau findet. Es entsteht eine Struktur, die Repositories, Entities, Columns und Translations zusammenfasst.
...
Verarbeiten von normierten XML-Dateien
Die XML-Dateien enthalten in der Regel alle Informationen, die von einem Repository oder einem Datensatz ausgehen. Das kann eine mehrdimensionale Datenmatrix sein. Diese Informationen lassen sich wie folgt wieder in Entities überführen. Im Folgenden ein Code-Beispiel:
Codeblock | ||
---|---|---|
| ||
use Brandbox\FrameworkEtl\Etl\ShareFile;
use Brandbox\Framework\Brandbox\Log;
$logger = new Log\PsrLogger();
$statefulImporter = $this
->staticController(ShareFile\ShareManager::class)
->getStatefulImporter('path/normalized.xml', $logger)
;
$run = $statefulImporter->run();
$dataPersistor = $statefulImporter->getDataPersistor();
$objects = $dataPersistor->getObjects();
$entities = [];
// Create entities and collect references
foreach ($objects as $repository => $importObjects) {
foreach ($importObjects as $importObjectKey => $importObject) {
$id = (int)$importObject->getValues()['id'];
/* @var ShareFile\Lib\Interfaces\PrimaryImportObjectInterface $importObject */
$entity = $this
->newInstance($repository)
->setID($id)
->detach()
;
$dataPersistor
->getInventory()
->addReferences($importObject->getReferences(), $entity)
;
$entities[$repository][$importObjectKey] = $entity;
}
}
// Map values to entities
foreach ($objects as $repository => $importObjects) {
foreach ($importObjects as $importObjectKey => $importObject) {
$entity = $entities[$repository][$importObjectKey];
$fields = $dataPersistor
->getFieldConverter()
->getImportFields($importObject->getRepository())
;
$dataPersistor->mapValuesInEntity($importObject, $entity, $fields);
}
}
var_dump($entities); |