Как использовать атрибут и элемент с одинаковым именем в JMS Serializer 2 и Serializer Bundle 3 для Symfony 4 - PullRequest
0 голосов
/ 17 января 2019

Мне нужна помощь с небольшой помощью. У нас есть XSD от нашего партнера, где нам нужно создать XML, где элемент использует одно и то же имя для фактической пары ключ / значение и атрибут узла.

<xs:element name="Translation">
      <xs:complexType>
          <xs:sequence>
              <xs:element ref="Name" minOccurs="0"/>
              <xs:choice minOccurs="0">
                  <xs:element ref="Value"/>
                  <xs:element ref="Unit"/>
                  <xs:sequence>
                      <xs:element ref="OptionName"/>
                      <xs:element ref="OptionValue" minOccurs="0"/>
                  </xs:sequence>
              </xs:choice>
          </xs:sequence>
          <xs:attribute name="lang" use="required" type="xs:string"/>
          <xs:attribute name="name"/>
          <xs:attribute name="value"/>
          <xs:attribute name="code" type="xs:string"/>
      </xs:complexType>
</xs:element>

Как видите, в качестве элемента и атрибута используются "имя" и "значение".

Можно ли указать сериализатору JMS использовать другую функцию для получения этих переменных?

Класс выглядит так:

use App\DataTransfer\AbstractDto;
use JMS\Serializer\Annotation as JMS;

class Translation extends AbstractDto
{

    /**
     * @var string
     * @JMS\XmlELement(cdata=false)
     */
    private $Name;

    /**
     * @var string
     * @JMS\XmlElement(cdata=false)
     */
    private $Value;

    /**
     * @var string
     * @JMS\XmlElement(cdata=false)
     */
    private $Unit;

    /**
     * @var string
     * @JMS\XmlAttribute
     */
    private $lang;
    /**
     * @var string
     * @JMS\XmlAttribute
     */
    private $name;
    /**
     * @var string
     * @JMS\XmlAttribute
     */
    private $code;
    /**
     * @var string
     * @JMS\XmlAttribute
     */
    private $value;
    [...]

Теперь для генерации геттеров и сеттеров нельзя использовать set / getName и set / getValue, которые необходимы сериализатору дважды ...

У кого-нибудь есть идея?

Заранее большое спасибо, ребята

exa.byte

...