5

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パーサーを避けたいと思っています。

4

1 に答える 1

5

XMLの性質上、あなたが望む正確なことは不可能です。オブジェクト->xmlおよびxml->オブジェクトを変換するために常に何かが必要になります。

私の提案は、コレクションとして機能し、オブジェクトのリストをプロパティとして保持し、既存のオブジェクトからxml入力から作成およびxml出力を作成できるクラスです。

別の方法として(実際にxmlとして使用する必要がない場合)、オブジェクトをシリアル化してそのように格納するか、配列(またはコレクションオブジェクト)を一度にすべてシリアル化する必要があります。PHPのプレーンなserialize()関数とunserialize()関数は、そこでトリックを実行します。これはデータのみであるため、クラスでメソッドをシリアライズおよびアンシリアライズする必要はありません。

更新: XMLをオブジェクトに取り込むだけの場合は、simplexmlですでにカバーされています: http ://www.php.net/manual/en/function.simplexml-load-string.php

2番目のパラメーターはクラス名です。

引用:simplexml_load_string()が指定されたクラスのオブジェクトを返すように、このオプションのパラメーターを使用できます。そのクラスは、SimpleXMLElementクラスを拡張する必要があります。

これだけがあなたの目標であるなら、simplexmlはすでにそれを行っています。

更新2:バンドルをもう少し読みました。それはあなたが望むことをしません。オブジェクトを取得してXML/YAMLにシリアル化し、もちろん、それらのシリアル化された状態からそのプロセスを再び逆にします。ランダムなXMLファイルを取得して、それを完璧なオブジェクトに変えることはできません。

于 2012-04-12T07:55:52.407 に答える