I am trying to deserialize a xml string inside of a SubscribingHandler
, based on a xml property on the root node, but I can't seem to find the right way to do it.
Let's have a look at this piece of pseudo code:
<?php
class FormulierWaardeHandler implements SubscribingHandlerInterface
{
private const TYPE_NAMESPACE = 'http://www.w3.org/2001/XMLSchema-instance';
private const TYPE_ATTRIBUTE = 'type';
public static function getSubscribingMethods()
{
return array(
array(
'direction' => GraphNavigator::DIRECTION_DESERIALIZATION,
'format' => 'xml',
'type' => WaardeType::class,
'method' => 'deserializeWaardeType'
),
);
}
public function deserializeWaardeType(
XmlDeserializationVisitor $visitor,
\SimpleXMLElement $data,
array $type,
DeserializationContext $context
) {
$domElement = dom_import_simplexml($data);
$typeName = $domElement->getAttributeNS(self::TYPE_NAMESPACE, self::TYPE_ATTRIBUTE);
$type['name'] = $typeName;
// '<formulier2data:Waarde i:type="formulier2data:DatumTijd"><formulier2data:Datum>2023-07-17T02:00:00+02:00</formulier2data:Datum></formulier2data:Waarde>',
// TODO: deserialize above piece of xml so that it matches the i:type metadata
// return new DatumTijd($datum);
}
}
I need to get the metadata for the DatumTijd
type, or whatever other type that is defined there. I already have all necessary mapping data in ./metadata/{types}.yml
, but I cannot figure out how to match them and return the right type.
Any help would be much appreciated.