cache->get('bpn_pickups', function (ItemInterface $item) use ($filename) { $item->expiresAfter(3600); $xml = simplexml_load_file($this->xmlPath . '/' . $filename); $pickups = []; foreach ($xml->zustieg as $pickup) { $id = (int)$pickup->attributes()['idbuspro']; $pickups[$id] = $this->parseXml($pickup); } return $pickups; }); } catch (InvalidArgumentException $e) { return []; } } public function loadById(int $id, ?string $filename = 'zustiege.xml'): ?Pickup { $pickups = $this->loadAll($filename); return $pickups[$id] ?? null; } public function parseXml(\SimpleXMLElement $xml): Pickup { $attributes = $xml->attributes(); $pickup = new Pickup(); $pickup->id = (int) $attributes['idbuspro']; $pickup->code = (string) $attributes['code']; $pickup->city = (string) $xml->ort; $pickup->postalCode = (string) $xml->plz; $pickup->street = (string) $xml->strasse; return $pickup; } public function patchPickupsDetails(Travel $travel): void { foreach ($travel->pickups as $pickupId => $pickup) { $pickupData = $this->loadById($pickupId); $pickup->code = $pickupData->code; $pickup->postalCode = $pickupData->postalCode; $pickup->city = $pickupData->city; $pickup->street = $pickupData->street; } } }