php json和xml互转(带属性)

xml转json

/**
 * 将xml转为json
 * @param string $source 文件路径|字符串
 */
function xmlToArray($source) {

    if(is_file($source)){ //传的是文件,还是xml的string的判断

        $xml_array=simplexml_load_file($source);

    }else{

        $xml_array=simplexml_load_string($source);

    }

    return json_encode($xml_array);

}

xml转json

/**
 * json转xml文件
 * @param string $source json字符串
 * @param string $charset 编码
*/
function jsonToXml($source, $charset="UTF-8")
{
    if(empty($source))
    {
        return false;
    }

    $array = json_decode($source, true);

    $xml = "<?xml version=\"1.0\" encoding=\"".$charset."\"?>";

    $xml .= json_to_xml_content($array,'xmeml');

    $xml .= '</xmeml>';

    return $xml;
}



/**
 * 递归
 * @param array $source 递归内容
 * @param string $parent_key 上级标签
*/
function json_to_xml_content( $source, $parent_key )
{
    $string = "";

    foreach($source as $k=>$v)
    {
        if( $k == '@attributes' ){

            $string .= '<' . $parent_key;
            foreach ( $v as $i => $item ){
                $string .= ' '.$i.'="'.$item.'"';
            }
            $string .= '>';
        }
        else{

            $parent_key = $k;
            if(is_array($v) || is_object($v))
            {
                if(is_numeric(array_key_first($v))){
                    foreach ( $v as $item ){
                        if(array_key_first($item) != '@attributes'){

                            $string .= "<".$parent_key.">";
                        }
                        $string .= json_to_xml_content($item, $parent_key);
                        $string .= "</".$parent_key.">";
                    }
                }
                elseif (array_key_first($v) == '@attributes'){

                    $string .= json_to_xml_content($v, $parent_key);
                    $string .= "</".$k.">";
                }
                else{

                    $string .= "<".$k.">";
                    $string .= json_to_xml_content($v, $parent_key);
                    $string .= "</".$k.">";
                }

            }
            else {
                $string .= "<".$k.">";
                $string .= $v;
                $string .= "</".$k.">";

            }
        }
    }

    return $string;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值