XML-атрибут Symfony Serializer

#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>