zwei14 / openimmo
OpenImmo library for PHP7/8. Read and write OpenImmo xml format with JMS Serializer.
dev-master
2021-04-21 12:06 UTC
Requires
- goetas-webservices/xsd2php: ^0.4
- goetas-webservices/xsd2php-runtime: ^0.2.2
- jms/serializer: ^1.9|^2.0|^3.0
This package is auto-updated.
Last update: 2025-03-13 21:07:50 UTC
README
composer require zwei14/openimmo:dev-master
Usage
Install composer package.
(Re) Generate classes for new OpenImmo version
OpenImmo
./../../../vendor/bin/xsd2php convert openimmo.yml path/to/openimmo_127b.xsd
git apply patch_user_defined_simplefield.patch
composer dumpautoload
Patch fixes user_defined_simplefield class and corresponding *.yml file for JMS serializer. Otherwise values are missing in XML after reading or writing (e.g. in import).
OpenImmo-Feedback
./../../../vendor/bin/xsd2php convert openimmo_feedback.yml path/to/openimmo-feedback_125.xsd
composer dumpautoload
Reading OpenImmo XML
$xmlString = file_get_contents('path/to/foobar.xml');
$serializerBuilder = SerializerBuilder::create();
$serializerBuilder->addMetadataDir(
__DIR__ . '/../../../../../../vendor/zwei14/openimmo/metadata/Zwei14/OpenImmo/API',
'Zwei14\OpenImmo\API'
);
$serializerBuilder->configureHandlers(function (HandlerRegistryInterface $handler) use ($serializerBuilder) {
$serializerBuilder->addDefaultHandlers();
$handler->registerSubscribingHandler(new BaseTypesHandler()); // XMLSchema List handling
$handler->registerSubscribingHandler(new XmlSchemaDateHandler()); // XMLSchema date handling
// $handler->registerSubscribingHandler(new YourhandlerHere());
});
$serializer = $serializerBuilder->build();
/* @var $openImmo Openimmo */
$openImmo = $serializer->deserialize($xmlString, Openimmo::class, 'xml');
Writing OpenImmo XML
$infrastruktur = new Infrastruktur();
$ausblick = new Ausblick();
$ausblick->setBlick('BERGE');
$distanzenSport = [
new DistanzenSport(15.0),
new DistanzenSport(10.0),
];
$distanzenSport[0]->setDistanzZuSport('SEE');
$distanzenSport[1]->setDistanzZuSport('SPORTANLAGEN');
$distanzen = [
new Distanzen(1.0),
];
$distanzen[0]->setDistanzZu('AUTOBAHN');
$infrastruktur
->setZulieferung(false)
->setAusblick($ausblick)
->setDistanzenSport($distanzenSport)
->setDistanzen($distanzen);
$newXml = $serializer->serialize($infrastruktur, 'xml');
Ergebnis
<infrastruktur>
<zulieferung>false</zulieferung>
<ausblick blick="BERGE"/>
<distanzen distanz_zu="AUTOBAHN">1.0</distanzen>
<distanzen_sport distanz_zu_sport="SEE">15.0</distanzen_sport>
<distanzen_sport distanz_zu_sport="SPORTANLAGEN">10.0</distanzen_sport>
</infrastruktur>