2012-04-11 3 views
5

API를 통해 xml 형식의 일부 데이터를 수집하고이를 객체 목록에서 비 직렬화하고자합니다. Symfony2를 사용하고 JMSSerializerBundle을 찾았지만 사용 방법을 모르겠습니다.Symfony2를 사용하여 xml을 객체에 맞 춥니 다.

나는 Sf2가 객체를 직렬화/역 직렬화 할 수 있다는 것을 알고 있지만 더 구체적인 것을 찾고있다. 예를 들어 는,이 클래스 :

<?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에에 통합하는 통합 뭔가를/사용할

(뭔가 :

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 파서를 피하는 것을 선호합니다.

답변

4

XML의 특성으로 인해 원하는 정확한 결과를 얻을 수 없습니다. 당신은 항상 객체 -> xml과 xml -> 객체를 번역 할 무언가가 필요합니다.

내 제안은 컬렉션으로 작동하고 그것을 당신을 위해 돌보고, 객체 목록을 속성으로 가지고 있으며, XML 입력에서 생성하고 기존 객체의 xml 출력을 만들 수 있습니다.

alternativ (실제로 xml로 가질 필요가없는 경우) 개체를 순차적으로 직렬화하여 그 방식으로 저장하거나 배열 (또는 컬렉션 개체)을 한꺼번에 검색 할 수 있습니다 . PHP에서 serialize() 및 unserialize() 함수를 사용하면 트릭을 수행 할 수 있습니다. 데이터 만 있기 때문에 클래스에서 serialize 및 unserialize하는 메서드가 필요하지 않습니다.

업데이트 : 그것은 단지 객체로 XML을인지이 다음 이미 커버하고있다 SimpleXML을 : http://www.php.net/manual/en/function.simplexml-load-string.php

두 번째 매개 변수는 클래스 이름입니다.

인용구 : simplexml_load_string()이 지정된 클래스의 객체를 반환하도록이 선택적 매개 변수를 사용할 수 있습니다. 이 클래스는 SimpleXMLElement 클래스를 확장해야합니다.

이것이 목표 인 경우 simplexml이 이미 수행합니다.

업데이트 2 : 번들에 대해 더 많이 읽었습니다. 그것은 당신이 원하는 것을하지 않습니다. 객체를 가져 와서 XML/YAML로 직렬화 한 다음 해당 직렬화 된 상태에서 해당 프로세스를 다시 되돌립니다. 임의의 XML 파일을 가져 와서 완벽한 객체로 만들 수는 없습니다.

+0

답변 해 주셔서 감사합니다. – Mikolaj

+0

당신은 오신 것을 환영합니다. 당신은 upvoting 그것을 받아 그것을 감사 할 수 :) –

+0

사실, 나는 내 실수 :) :) 내 코멘트가 있습니다 : 답변 주셔서 감사합니다. 실제로 표시된 클래스는 예제 일 뿐이며 2 개의 함수는 간단한 시도입니다. 수제 함수를 사용하여 xml을 serialize/deserialize하고 싶지 않습니다. JMSSerializerBundle은 내가 원하는 것을 제공 할 수 있지만 제대로 사용하지 못했다는 것을 알고 있습니다 ... 특히 JMSSB 사용에 대한 예제 또는 Symfony2를 통해 확장 가능한/"자동으로"수행하는 다른 방법을 찾고 있습니다. – Mikolaj

관련 문제