zwei14 / openimmo
PHP7/8 的 OpenImmo 库。使用 JMS Serializer 读取和写入 OpenImmo XML 格式。
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: 2024-09-13 19:58:25 UTC
README
composer require zwei14/openimmo:dev-master
用法
安装 composer 包。
为新的 OpenImmo 版本(重新)生成类
OpenImmo
./../../../vendor/bin/xsd2php convert openimmo.yml path/to/openimmo_127b.xsd
git apply patch_user_defined_simplefield.patch
composer dumpautoload
修补程序修复了 user_defined_simplefield 类及其相应的 *.yml 文件以供 JMS 序列化器使用。否则,在读取或写入(例如导入)后值将丢失。
OpenImmo 反馈
./../../../vendor/bin/xsd2php convert openimmo_feedback.yml path/to/openimmo-feedback_125.xsd
composer dumpautoload
读取 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');
写入 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');
结果
<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>