This project is almost entirely generated from the Siri xsd shchemas found here
The generated XML can then be posted using a HTTP client (like Guzzle)
With composer:
composer require calcinai/siri
use Calcinai\Siri\Objects\Siri;
use Calcinai\Siri\Objects\ServiceRequest;
use Calcinai\Siri\Objects\VehicleMonitoringRequest;
use Calcinai\Siri\Serializer
$requestTimestamp = new DateTime();
$siri = new Siri();
$request = new ServiceRequest();
$vmRequest = new VehicleMonitoringRequest();
$siri->setVersion(1.3)
->setServiceRequest($request);
$vmRequest->setVersion(1.3)
->setVehicleRef('3706')
->setRequestTimestamp($requestTimestamp);
$request->setVehicleMonitoringRequest($vmRequest)
->setRequestTimestamp($requestTimestamp)
->setRequestorRef('Requestor');
$serializer = new Serializer();
$xml = $serializer->serialize($siri);
echo $xml;
Will produce XML like
<?xml version="1.0" encoding="UTF-8"?>
<Siri xmlns="http://www.siri.org.uk/siri" version="1.3">
<ServiceRequest>
<RequestTimestamp>2019-07-18T23:08:07+00:00</RequestTimestamp>
<RequestorRef>Requestor</RequestorRef>
<VehicleMonitoringRequest version="1.3">
<RequestTimestamp>2019-07-18T23:08:07+00:00</RequestTimestamp>
<VehicleRef>3706</VehicleRef>
</VehicleMonitoringRequest>
</ServiceRequest>
</Siri>
The xml above can be deserialized to recreate the object structure
$siri = $serializer->deserialize($xml);
print_r($siri); //The root siri object
This code is almost completely generated from xsd2php, thanks @goetas-webservices!