Десериализовать комплекс XML на объект - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть сложный XML файл, который мне нужно десериализовать в PHP Объект.

XML

<?xml version="1.0" encoding="UTF-8"?>
<xb:BAG-Extract-Deelbestand-LVC xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                                ...>
    <xb:antwoord>
        <xb:vraag>
            <selecties-extract:Gebied-Registratief>
                <selecties-extract:Gebied-NLD>
                    <selecties-extract:GebiedIdentificatie>9999</selecties-extract:GebiedIdentificatie>
                    <selecties-extract:GebiedNaam>Nederland</selecties-extract:GebiedNaam>
                    <selecties-extract:gebiedTypeNederland>1</selecties-extract:gebiedTypeNederland>
                </selecties-extract:Gebied-NLD>
            </selecties-extract:Gebied-Registratief>
            <selecties-extract:StandTechnischeDatum>20200208</selecties-extract:StandTechnischeDatum>
        </xb:vraag>
        <xb:producten>
            <product_LVC:LVC-product>
                <bag_LVC:Nummeraanduiding>
                    <bag_LVC:identificatie>123456789</bag_LVC:identificatie>
                    <bag_LVC:aanduidingRecordInactief>N</bag_LVC:aanduidingRecordInactief>
                    <bag_LVC:aanduidingRecordCorrectie>0</bag_LVC:aanduidingRecordCorrectie>
                </bag_LVC:Nummeraanduiding>
            </product_LVC:LVC-product>
        </xb:producten>
    </xb:antwoord>
</xb:BAG-Extract-Deelbestand-LVC>

Код

$xml = ...;

$encoders = [
    new \Symfony\Component\Serializer\Encoder\XmlEncoder(),
];
$normalizers = [
    new \Symfony\Component\Serializer\Normalizer\ObjectNormalizer(),
    new \Symfony\Component\Serializer\Normalizer\ArrayDenormalizer(),
];

$serializer = new \Symfony\Component\Serializer\Serializer($normalizers, $encoders);
$obj = $serializer->deserialize($xml,\App\Entity\Nummeraanduiding::class . '[]', 'xml');

Объект

class Nummeraanduiding
{
    private $identificatie;
    private $aanduidingRecordInactief;
    private $aanduidingRecordCorrectie;
}

Я получаю следующий результат

array(12) {
  ["@xmlns:selecties-extract"]=>
  object(App\Entity\Nummeraanduiding)#13 (13) {
    ["identificatie":"App\Entity\Nummeraanduiding":private]=>
    NULL
    ["aanduidingRecordInactief":"App\Entity\Nummeraanduiding":private]=>
    NULL
    ["aanduidingRecordCorrectie":"App\Entity\Nummeraanduiding":private]=>
    NULL

Кто-нибудь знает, как я могу установить xb:BAG-Extract-Deelbestand-LVC > xb:antwoord > xb:producten как root для повторения? или другие / лучшие способы десериализации XML в коллекцию Nummeraanduiding объектов.

...