php生成xml(组装、DomDocument、XMLWriter、SimpleXML)数据

1、组装字符串

    /**
     * 按照xml方式输出通信数据
     * @param $code [状态码]
     * @param string $message [提示信息]
     * @param array $data [数据]
     * @return string
     */
    public static function XMLEncode($code,$message='',$data=array())
    {
        if(!is_numeric($code)) {
            return '';
        }
        $result = array(
            'code'    => $code,
            'message' => $message,
            'data'    => $data
        );
        header("Content-Type:application/xml");
        $xml = "<?xml version = '1.0' encoding = 'UTF-8'?>\n";
        $xml.= "<root>\n";
        $xml.= self::XMLToEncode($result);
        $xml.= "</root>";
        echo $xml;
    }

    /**
     * 获取xml内容
     * @param $data [数组]
     * @return string
     */
    private static function XMLToEncode($data)
    {
        $xml = $attr = '';
        foreach ($data as $key => $value) {
            if(is_numeric($key)) {
                $attr = "id='{$key}'";
                $key = "item";
            }
            $xml.= "<{$key} {$attr}>";
            $xml.= is_array($value) ? self::XMLToEncode($value) : $value;
            $xml.= "</{$key}>\n";
        }
        return $xml;
    }

2、DomDocument生成XML

  /**
     * @param $data [数组]
     * @param string $item [根节点名称]
     * @param string $version [版本号]
     * @param string $encoding [字符编码]
     * @return string
     */
    public static function DomDocument($data,$item = 'root',$version = '1.0',$encoding = 'utf-8')
    {
        //判断是否传输的是数组并且保证里面有数据
        if(!is_array($data) && count($data) !== 0) {
            return '';
        }
        //设置xml版本与字符集
        $doc = new DOMDocument($version,$encoding);
        $root = self::xmlContent($data,$doc,$item);
        $doc->appendChild($root);//把根节点挂载在DOMDocument对象
        $doc->save('stu.xml');
        header("Content-Type:application/xml");
        $content = file_get_contents('stu.xml');
        print_r($content);
    }

    /**
     * 遍历xml内容
     * @param $data [数组]
     * @param $domDocument [对象]
     * @param $item [根目录]
     * @return array;
     */
    private static function xmlContent($data,$domDocument,$item)
    {
        //创建根节点
        if(is_numeric($item)) {
            $root = $domDocument->createElement('node');
            $id = $domDocument->createAttribute('id');
            $value = $domDocument->createTextNode($item);
            $id->appendChild($value);
            $root->appendChild($id);
        } else {
            $root = $domDocument->createElement($item);
        }

        foreach ($data as $key => $value) {
            if(is_array($value) && count($value) !== 0) {
                //子节点
                $items = self::xmlContent($value,$domDocument,$key);
            } else {
                if (is_numeric($key)) {
                    $domElement = $domDocument->createElement('node', $value);
                    $domAttribute = $domDocument->createAttribute('id');
                    $domAttribute->value = $key;
                    $domElement->appendChild($domAttribute);
                    $items = $domDocument->appendChild($domElement);
                } else {
                    $items = $domDocument->createElement($key, $value);
                }
            }
            $root->appendChild($items);
        }
        return $root;
    }

 

3、XMLWriter 生成XML

 

4、SimpleXML生成XML

 

posted @ 2018-07-03 08:56  Mr*wang  阅读(794)  评论(0)    收藏  举报