获取给定PHP对象并将其序列化为XML的最佳方法是什么?我正在看simple_xml,我用它来将XML解析为对象,但我不清楚它是如何工作的.
我同意使用PEAR的XML_Serializer,但如果你想要一些简单的东西支持具有嵌套属性的对象/数组,你可以使用它.
class XMLSerializer { // functions adopted from http://www.sean-barton.co.uk/2009/03/turning-an-array-or-object-into-xml-using-php/ public static function generateValidXmlFromObj(stdClass $obj, $node_block='nodes', $node_name='node') { $arr = get_object_vars($obj); return self::generateValidXmlFromArray($arr, $node_block, $node_name); } public static function generateValidXmlFromArray($array, $node_block='nodes', $node_name='node') { $xml = ''; $xml .= '<' . $node_block . '>'; $xml .= self::generateXmlFromArray($array, $node_name); $xml .= '' . $node_block . '>'; return $xml; } private static function generateXmlFromArray($array, $node_name) { $xml = ''; if (is_array($array) || is_object($array)) { foreach ($array as $key=>$value) { if (is_numeric($key)) { $key = $node_name; } $xml .= '<' . $key . '>' . self::generateXmlFromArray($value, $node_name) . '' . $key . '>'; } } else { $xml = htmlspecialchars($array, ENT_QUOTES); } return $xml; } }
看一下PEAR的XML_Serializer包.我使用它的效果非常好.您可以为它提供数组,对象等,它会将它们转换为XML.它还有一些选项,例如选择根节点的名称等.
应该做的伎俩
对原始问题的回答不是很完美,但我解决问题的方法是将对象声明为:
$root = ''; $object = new simpleXMLElement($root);
而不是:
$object = new stdClass;
在我开始添加任何值之前!
使用dom函数:http: //www.php.net/manual/en/function.dom-import-simplexml.php
导入SimpleXML对象,然后保存.以上链接包含一个示例.:)
简而言之:
'world', 'good' => 'morning'); $xml = simplexml_load_string(""); foreach ($array as $k=>$v) { $xml->addChild($k, $v); } ?>