#xml #symfony #serialization
#xml #symfony #Сериализация
Вопрос:
Я хочу использовать XML-сериализатор Symfony для преобразования экземпляра класса (не массива). Так, например, я хочу создать XML, подобный so, с атрибутом myAtt=»foo» ,
<?xml version="1.0"?>
<REQ>
<TravelAgencySender myAtt="foo">
<CityName>town</CityName>
<AgencyID>agency</AgencyID>
</TravelAgencySender>
</REQ>
Итак, я создал класс следующим образом
class TravelAgencySender
{
/**
* @var string
*/
private $CityName;
/**
* @var string
*/
public $AgencyID;
.....
}
И следующая инициализация
use SymfonyComponentSerializerEncoderJsonEncoder;
use SymfonyComponentSerializerNameConverterMetadataAwareNameConverter;
use SymfonyComponentSerializerNormalizerObjectNormalizer;
use SymfonyComponentSerializerSerializer;
use SymfonyComponentSerializerEncoderXmlEncoder;
use SymfonyComponentSerializerMappingFactoryClassMetadataFactory;
use SymfonyComponentSerializerMappingLoaderAnnotationLoader;
use DoctrineCommonAnnotationsAnnotationReader;
$classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
$metadataAwareNameConverter = new MetadataAwareNameConverter($classMetadataFactory);
$serializer = new Serializer(
[new ObjectNormalizer($classMetadataFactory, $metadataAwareNameConverter)],
['json' => new JsonEncoder(), 'xml' => new XmlEncoder()]
);
Кто-нибудь знает, как добавить атрибут myAtt?
Спасибо
И это создает приведенный ниже XML
<?xml version="1.0"?>
<REQ>
<TravelAgencySender>
<CityName>town</CityName>
<AgencyID>agency</AgencyID>
</TravelAgencySender>
</REQ>
Комментарии:
1. Если сможете, переходите к JMSSerializer Bundle. Пример с атрибутом приведен здесь .
Ответ №1:
Ключи массива, начинающиеся с @ , считаются атрибутами XML:
['foo' => ['@bar' => 'value']];
кодируется следующим образом:
<?xml version="1.0"?>
<response>
<foo bar="value"/>
</response>