Mik*_*laj 5 php xml xml-serialization xml-deserialization symfony
我通过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;
}
}
Run Code Online (Sandbox Code Playgroud)
我想序列化/反序列化到这种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>
Run Code Online (Sandbox Code Playgroud)
我真的想要使用集成/集成在Sf2中的东西("光滑"的东西)并且更喜欢避免使用任何自制的xml解析器.
由于XML的本质,您想要的确切的东西是不可能的.你总是需要一些东西来翻译对象 - > xml和xml - >对象.
我给你的建议是一个作为集合的类,并为你处理它,将对象列表保存为属性,可以从xml输入创建并从现有对象创建xml输出.
一个替代方案(如果你真的不需要再将它作为xml)将简单地序列化对象并以那种方式存储它们,或者如果你想要一次性化它们,则将数组(或集合对象)分类.来自PHP的普通serialize()和unserialize()函数将在那里完成.由于它只是数据,因此您甚至不需要在类中进行序列化和反序列化的方法.
更新:如果它只将XML作为一个对象,那么simplexml已经涵盖了你:http://www.php.net/manual/en/function.simplexml-load-string.php
第二个参数是类名.
Quote:您可以使用此可选参数,以便simplexml_load_string()将返回指定类的对象.该类应该扩展SimpleXMLElement类.
如果这只是你的目标,那么simplexml已经完成了.
更新2:我已经阅读了更多内容.它没有做你想要的.它需要一个对象并将其序列化为XML/YAML,然后当然会从那些序列化状态再次反转该过程.它不能采用一些随机的XML文件,并将其转换为完美的对象.