当前位置:  开发笔记 > 编程语言 > 正文

PHP对象作为XML文档

如何解决《PHP对象作为XML文档》经验,为你挑选了4个好方法。

获取给定PHP对象并将其序列化为XML的最佳方法是什么?我正在看simple_xml,我用它来将XML解析为对象,但我不清楚它是如何工作的.



1> philfreo..:

我同意使用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 .= '';

        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) . '';
            }
        } else {
            $xml = htmlspecialchars($array, ENT_QUOTES);
        }

        return $xml;
    }

}


很好,对我很有用.特别是如果你不想要PEAR的任何依赖.
@MattBoyle,我使用json_decode将simpleXML作为对象.试试你的对象.`$ xml_generater = new XMLSerializer; $ std_class = json_decode(json_encode($ object)); $ xml = $ xml_generater-> generateValidXmlFromObj($ std_class); `

2> phatduckk..:

看一下PEAR的XML_Serializer包.我使用它的效果非常好.您可以为它提供数组,对象等,它会将它们转换为XML.它还有一些选项,例如选择根节点的名称等.

应该做的伎俩


我试图在php 5.3.13上使用这个软件包(这个响应后4年),我在XML_Serializer及其依赖项上遇到严格标准错误.知道其他任何选择吗?
警告,库有可怕的依赖!

3> significance..:

对原始问题的回答不是很完美,但我解决问题的方法是将对象声明为:

$root = '';
$object = new simpleXMLElement($root); 

而不是:

$object = new stdClass;

在我开始添加任何值之前!



4> Till..:

使用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);
}
?>

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有