Какой правильный синтаксис ключ / значение для преобразования этого массива с Symfony / XmlEncoder? - PullRequest
0 голосов
/ 25 сентября 2019

Я строю свои данные запроса в виде структуры массива и хочу использовать Symfony XmlEncoder для кодирования моего массива в XML.

так что, я думаю, я понял основную часть, это выглядит, например, так:

    $request_object = [
      "acc-id" => $all_credentials,
      "req-id" => $request_guid,
      "tran-type" => "spec-url"
    ];

синтаксис, который я ищу, кодирует в следующем формате с атрибутом и значением:

 <amount currency="EUR">1.99</amount>

У меня есть возможность использовать знак @ на ключе массива, но кактакже вписывается в значение?

    $request_object = [
      "acc-id" => $all_credentials,
      "req-id" => $request_guid,
      "tran-type" => "spec-url"
      "am" => ["@attr"=>"attrval"] 
    ];

это должно быть

<am attr="attrval"/>

но как записать это, что я также могу установить значение?как:

<am attr="attrval">VALUE</am>

помощь очень ценится

1 Ответ

1 голос
/ 26 сентября 2019

Используйте '#' в качестве индекса для скалярного значения.
Я нашел его, просматривая тесты для кодировщика.

#src:https://github.com/symfony/serializer/blob/master/Tests/Encoder/XmlEncoderTest.php  

#line: 196
public function testEncodeScalarRootAttributes()
{
    $array = [
        '#' => 'Paul',
        '@eye-color' => 'brown',
    ];
    $expected = '<?xml version="1.0"?>'."\n".
        '<response eye-color="brown">Paul</response>'."\n";
    $this->assertEquals($expected, $this->encoder->encode($array, 'xml'));
}
...
#line: 234
public function testEncodeScalarWithAttribute()
{
    $array = [
        'person' => ['@eye-color' => 'brown', '#' => 'Peter'],
    ];
    $expected = '<?xml version="1.0"?>'."\n".
        '<response><person eye-color="brown">Peter</person></response>'."\n";
    $this->assertEquals($expected, $this->encoder->encode($array, 'xml'));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...