Symfony десериализует пространство имен xml по умолчанию для объекта

Даны два XML-файла, которые имеют одинаковую информацию в другом формате. Оба должны быть десериализованы в одну и ту же сущность Symfony:

1.

<?xml version="1.0" encoding="iso-8859-1" ?>
<Request xmlns:dxn="http://defaultxmlnamespace.org" xmlns:axn="http://anotherxmlnamespace.org">
<dxn:Id>123456</dxn:Id>
<axn:Name>JohnDoe</axn:Name>
</Request>

2.

<?xml version="1.0" encoding="iso-8859-1" ?>
<Request xmlns="http://defaultxmlnamespace.org" xmlns:axn="http://anotherxmlnamespace.org">
<Id>123456</Id>
<axn:Name>JohnDoe</axn:Name>
</Request>

В первом примере пространство имен зарегистрировано с префиксом «dxn», а во втором оно задано как пространство имен по умолчанию. Моя сущность (без получения / установки) выглядит так:

private $dxnId;
private $axnName;

Я использую «NameConverterInterface» для преобразования имени узла из «dxn: Id» в «dxnId», поскольку двоеточия нельзя использовать в имени элемента Entity. Но это не работает в обоих случаях, так как префикс «dxn» известен сериализатору только в примере №. 1.

Мой обходной путь теперь состоит в том, чтобы отобразить данные в массив и манипулировать ими там, прежде чем сопоставить их с сущностью. Я думаю, что сохранение пространства имен в имени элемента Entity не лучший вариант, но я должен сохранить информацию о пространстве имен для последующей сериализации.

Так каков наилучший способ десериализации такой структуры?

0

Решение

Вы можете включить зависимость JMSSerializer в ваш проект для управления сериализацией / десериализацией xml для сущностей, если это уместно. Это действительно сильный инструмент сериализации, который имеет специальную аннотацию @XmlNamespace с параметром тега, который решает ваш случай. Вот ссылка: https://jmsyst.com/libs/serializer

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector