2012-04-11 17 views
5

APIを使用してxml形式のデータを収集し、オブジェクトリストで逆シリアル化したいと思います。 私はSymfony2を使用してJMSSerializerBundleを見つけましたが、実際の使用方法はわかりません。xmlをSymfony2でオブジェクトに逆シリアル化する

私は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

XMLの性質上、正確なことはできません。あなたはいつもobject - > xmlとxml - > objectを翻訳するために何かが必要です。

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

もう1つの方法(実際にxmlとして持つ必要がない場合)は、単純にオブジェクトをシリアル化してその方法で保存するか、一度にすべてを必要とする場合は配列またはコレクションオブジェクトを検索します。 PHPのplainize()関数とunserialize()関数はそこでトリックを行います。それはデータだけなので、クラス内でメソッドのシリアライズとシリアライズを行う必要はありません。

更新:それが唯一のオブジェクトにXMLを取るなら、その後のSimpleXMLはすでにあなたがカバーしている: http://www.php.net/manual/en/function.simplexml-load-string.php

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

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

これがあなたの目標である場合、simplexmlはそれを既に行います。

更新2:私はバンドルにもう少し読みました。それはあなたが望むことをしません。それはオブジェクトをとり、それをXML/YAMLに直列化し、その直列化された状態からそのプロセスをやり直します。それはいくつかのランダムなXMLファイルを取ることはできませんし、完璧なオブジェクトにあなたを回します。

+0

ご回答ありがとうございます。 – Mikolaj

+0

あなたは大歓迎です。あなたはそれをupvotingして受け入れることによって私に感謝することができます:) –

+0

実際には、私は私のショットが欠けて:)ここに私のコメントです:あなたの答えをありがとう。実際に表示されるクラスは単なる例であり、2つの関数は単純な試行です。私は手作りの関数でxmlにシリアル化/デシリアライズしたくない。私はJMSSerializerBundleが私が望むものを提供できることは知っていますが、正しく使用することに成功しませんでした...私は特にJMSSBの使用例やSymfony2を使ってスケーラブルな "自動"の別の方法を探しています。 – Mikolaj

関連する問題