У меня есть xml, как это:
<screen>
<text id="qs65d4"></text>
<image id="xcq789"></image>
<text id="9s8xdf7"></text>
<button id="q6sd47"></button>
</screen>
Мне нужно десериализовать его и получить массив «экранных объектов», вот что я попробовал:
class Screen {
/**
* @Type("array<string, MyBundle\Entity\ScreenObject>")
* @XmlList(entry = "*")
*/
protected $objects;
}
И мой класс ScreenObject
/**
* @Discriminator(field = "type", map = {
* "text": "MyBundle\Entity\ScreenObjects\Text",
* "image": "MyBundle\Entity\ScreenObjects\Image",
* "button": "MyBundle\Entity\ScreenObjects\Button"* })
*/
class ScreenObject {
/**
* @Type("string")
*/
protected $id;
}class Text extends ScreenObject{
/**
* @Type("string")
* @XmlAttribute
*/
protected $id;
public function getType() {
return 'text';
}
}
...
Я знаю подстановочный знак @XmlList (entry = ««) * немного опасно, но я не могу найти свое решение в документации JMS.
Спасибо за помощь.
Задача ещё не решена.
Других решений пока нет …