2012-04-11 15 views
5

के साथ ऑब्जेक्ट करने के लिए xml deserialize मैं एक एपीआई के माध्यम से एक्सएमएल प्रारूप में कुछ डेटा एकत्र करता हूं और इसे ऑब्जेक्ट सूची में deserialize करना चाहता हूं। मैं सिम्फनी 2 का उपयोग कर रहा हूं और जेएमएसएसरियलाइज़रबंडल का पता लगा रहा हूं लेकिन मुझे वास्तव में इसका उपयोग नहीं करना है।Symfony2

मुझे पता है कि एसएफ 2 ऑब्जेक्ट को/से ऑब्जेक्ट को क्रमबद्ध/deserialize करने की अनुमति देता है, लेकिन मैं कुछ और विशिष्ट खोज रहा हूं। उदाहरण के लिए, इस वर्ग के लिए:

<?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; 
    } 
} 

मैं करने के लिए/serializing/deserializing एक्सएमएल इस तरह से करना चाहते हैं "चिकनी") और किसी भी घर का बना एक्सएमएल पार्सर्स से परहेज करना पसंद करते हैं।

उत्तर

4

एक्सएमएल की प्रकृति के कारण, आप जो सटीक चीज चाहते हैं, संभव नहीं है। ऑब्जेक्ट -> xml और xml -> ऑब्जेक्ट का अनुवाद करने के लिए आपको हमेशा कुछ चाहिए।

मेरा सुझाव आपको एक वर्ग होगा जो संग्रह के रूप में काम करता है और आपके लिए इसका ख्याल रखता है, वस्तुओं की सूची को संपत्ति के रूप में रखता है, जिसे एक्सएमएल इनपुट से बनाया जा सकता है और मौजूदा वस्तुओं से एक्सएमएल आउटपुट बना सकता है।

एक वैकल्पिक (यदि आपको वास्तव में इसे अब xml के रूप में नहीं रखना है) तो ऑब्जेक्ट को क्रमबद्ध करना होगा और उन्हें उस तरह से स्टोर करना होगा, या एक सरणी (या संग्रह ऑब्जेक्ट) को खोजना होगा यदि आप उन्हें सभी एक बार में चाहते हैं । PHP से सादा serialize() और unserialize() फ़ंक्शन वहाँ चाल करेंगे। चूंकि यह केवल डेटा है, इसलिए आपको अपनी कक्षा में serialize और unserialize विधियों की भी आवश्यकता नहीं है।

अद्यतन: यदि यह केवल एक वस्तु में एक्सएमएल ले रहा है, तो पहले से ही आप को कवर किया SimpleXML: http://www.php.net/manual/en/function.simplexml-load-string.php

दूसरा पैरामीटर वर्ग के नाम है।

उद्धरण: आप इस वैकल्पिक पैरामीटर का उपयोग कर सकते हैं ताकि simplexml_load_string() निर्दिष्ट कक्षा का ऑब्जेक्ट लौटाए। उस वर्ग को SimpleXMLElement क्लास का विस्तार करना चाहिए।

यदि यह केवल आपका लक्ष्य है, तो सरल xml पहले से ही करता है।

अद्यतन 2: मैंने कुछ और बंडल में पढ़ा है। यह वही नहीं करता जो आप चाहते हैं। यह एक ऑब्जेक्ट लेता है और इसे एक्सएमएल/वाईएएमएल में क्रमबद्ध करता है, और फिर निश्चित रूप से उन धारावाहिक राज्यों से उस प्रक्रिया को उलट देता है। यह कुछ यादृच्छिक एक्सएमएल फ़ाइल नहीं ले सकता है और इसे आपके लिए एक सही वस्तु में बदल सकता है।

+0

आपके उत्तर के लिए धन्यवाद। – Mikolaj

+0

आपका स्वागत है। आप इसे ऊपर उठाकर इसे स्वीकार कर धन्यवाद कर सकते हैं :) –

+0

असल में, मुझे अपना शॉट याद आ रहा है :) यहां मेरी टिप्पणी है: आपके उत्तर के लिए धन्यवाद। वास्तव में प्रदर्शित वर्ग सिर्फ एक उदाहरण है और 2 कार्य सरल कोशिशें हैं। मैं घर के काम के साथ xml से/sererialize/deserialize नहीं करना चाहता। मुझे पता है कि जेएमएसएसरियलाइज़रबंडल जो भी मैं चाहता हूं उसे प्रदान कर सकता हूं लेकिन मैं इसे सही तरीके से उपयोग करने में सफल नहीं हुआ ... मैं विशेष रूप से जेएमएसएसबी उपयोग या इसे "स्वचालित रूप से" करने का एक और तरीका, सिम्फनी 2 के साथ/स्केलेबल करने के लिए एक उदाहरण ढूंढ रहा हूं। – Mikolaj