反序列化的XML与Symfony2的反对(Deserialize xml to object wit

2019-06-23 13:20发布

我通过API收集一些XML格式的数据,并想反序列化在对象列表中。 我使用Symfony2中,并找出JMSSerializerBundle,但我真的不知道如何使用它。

我知道,Sf2的允许序列从阵列/反序列化对象/,但是我正在寻找更具体的东西。 举例来说,对于这个类:

class Screenshot
{
    /**
     * @var integer $id
     */
    private $id;

    /**
     * @var string $url_screenshot
     */
    private $url_screenshot;


    public function __construct($id, $url_screenshot) {
        $this->id = $id;
        $this->url_screenshot = $url_screenshot;
    }


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set url_screenshot
     *
     * @param string $urlScreenshot
     */
    public function setUrlScreenshot($urlScreenshot)
    {
        $this->url_screenshot = $urlScreenshot;
    }

    /**
     * Get url_screenshot
     *
     * @return string 
     */
    public function getUrlScreenshot()
    {
        return $this->url_screenshot;
    }

    /**
     * Serializes the Screenshot object.
     *
     * @return string
     */
    public function serialize()
    {
        return serialize(array(
            $this->id,
            $this->url_screenshot
        ));
    }

    /**
     * Unserializes the Screenshot object.
     *
     * @param string $serialized
     */
    public function unserialize($serialized)
    {
        list(
            $this->id,
            $this->url_screenshot
        ) = unserialize($serialized);
    }

    public function __toString() {
        return "id: ".$this->id
              ."screenshot: ".$this->url_screenshot;
    }
}

我想序列化/从这种XML的反序列化到/:

<?xml version="1.0" encoding="UTF-8" ?>
<screenshots>
   <screenshot>
      <id>1</id>
      <url_screenshot>screenshot_url1</url_screenshot>
   </screenshot>
   <screenshot>
      <id>2</id>
      <url_screenshot>screenshot_url2</url_screenshot>
   </screenshot>
   <screenshot>
      <id>3</id>
      <url_screenshot>screenshot_url3</url_screenshot>
   </screenshot>
</screenshots>

我真的想用的东西综合/在Sf2的整合(东西“平滑”),并倾向于避免任何自制的XML解析器。

Answer 1:

由于XML的特性,你想要的确切的事情,是不可能的。 你总是需要一些东西来翻译对象 - > XML和XML - >对象。

我给你的建议是,它作为收集和照顾它给你,拿着对象的属性,它可以从XML输入来创建,并从现有的对象创建XML输出列表中选择一个类。

可选择性的(如果你不真的需要它作为XML的了)是简单地序列化对象和存储他们的方式,或者如果你想一次全部searialize数组(或集合对象)。 平原序列化()和反序列化()函数从PHP会做的伎俩在那里。 由于它的数据而已,你甚至不需要方法序列化和在你的类反序列化。

更新:如果它只是把XML转换成一个对象,然后simplexml的已经有你覆盖: http://www.php.net/manual/en/function.simplexml-load-string.php

第二个参数是类名。

报价:你可以使用这个可选的参数,以便simplexml_load_string()将返回指定的类的对象。 那类应该扩展为SimpleXMLElement类。

如果只有这是你的目标,然后simplexml的确实它已经。

更新2:我读过多一些成束。 它不会做你想要什么。 这需要在物体和其序列化到XML / YAML,然后当然从这些串行化状态再次反转这一进程。 它不能采取一些随机的XML文件,并把它转换成您的最佳对象。



文章来源: Deserialize xml to object with Symfony2