42 lines
1.3 KiB
PHP
42 lines
1.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\BusProNet\XmlParser;
|
|
|
|
use App\BusProNet\Model\Agency;
|
|
use Symfony\Component\DomCrawler\Crawler;
|
|
|
|
final class AgencyParser extends AbstractParser
|
|
{
|
|
/**
|
|
* @return Agency[]
|
|
*/
|
|
public function parse(Crawler $node): array
|
|
{
|
|
$agencies = [];
|
|
|
|
$node->filterXPath('//agenturen/agentur')->each(function (Crawler $agencyNode) use (&$agencies): void {
|
|
$id = (int) $agencyNode->attr('id');
|
|
$name = $this->getStringOrNullValue($agencyNode->filterXPath('//name')) ?? '';
|
|
$code = $this->getStringOrNullValue($agencyNode->filterXPath('//code')) ?? '';
|
|
$street = $this->getStringOrNullValue($agencyNode->filterXPath('//strasse'));
|
|
$postCode = $this->getStringOrNullValue($agencyNode->filterXPath('//plz'));
|
|
$city = $this->getStringOrNullValue($agencyNode->filterXPath('//ort'));
|
|
$phone = $this->getStringOrNullValue($agencyNode->filterXPath('//telefon'));
|
|
|
|
$agencies[] = new Agency(
|
|
id: $id,
|
|
name: $name,
|
|
code: $code,
|
|
street: $street,
|
|
postCode: $postCode,
|
|
city: $city,
|
|
phone: $phone
|
|
);
|
|
});
|
|
|
|
return $agencies;
|
|
}
|
|
}
|