Я пытаюсь десериализовать строку xml внутри SubscribingHandler
, основываясь на свойстве xml корневого узла, но я не могу найти правильный способ сделать это.
Давайтевзгляните на этот кусок псевдокода:
<?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);
}
}
Мне нужно получить метаданные для типа DatumTijd
или любого другого типа, который там определен.У меня уже есть все необходимые данные сопоставления в ./metadata/{types}.yml
, но я не могу понять, как сопоставить их и вернуть правильный тип.
Любая помощь будет принята с благодарностью.