xml,数组数据转换

数组转XML

//数组转xml

function ArrToXml($arr)
{
	if(!is_array($arr) || count($arr) == 0) return '';	
	$xml = "<xml>";
	foreach ($arr as $key=>$val)
	{
		if (is_numeric($val)){
			$xml.="<".$key.">".$val."</".$key.">";
		}else{
			$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
		}
	}
	$xml.="</xml>";
	return $xml; 
}

数组转xml

  public function arrayToXml($arr){
        $xml = "<xml>";
        foreach ($arr as $key=>$val) {
            if (is_numeric($val)){
                $xml.="<".$key.">".$val."</".$key.">";
            }else{
                $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
            }
        }
        $xml.="</xml>";
        return $xml;
  }

一维数组转换为XML数据

<?php  
/** 
 * 一维数组转xml 
 * @author webbc 
 */  
$arr = array(  
    'name' => 'webbc',  
    'age' => '22',  
);//要转换的数组  
  
//转换函数  
function arr2xml($arr){  
    $simxml = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><root></root>');//创建simplexml对象  
    //遍历数组,循环添加到root节点中  
    foreach($arr as $k=>$v){  
        $simxml->addChild($k,$v);  
    }  
    //返回xml数据  
    header('Content-type:text/xml;charset=utf-8');  
    return $simxml->saveXML();  
}  
echo arr2xml($arr);//输出到浏览器  
?>  

多维数据转换为XML

<?php  
/** 
 * 多维数组转xml 
 * @author webbc 
 */  
$arr = array(  
    'name' => 'webbc',  
    'age' => '22',  
    'job' => array(  
        'title' => '销售经理',  
        'salary' => '12K',  
        'team' => array('小明','小华','小林')  
    )  
);//要转换的多维数组信息  
  
//转换函数  
function arr2xml($arr,$parentNode=null){  
    //如果父节点为null,则创建root节点,否则就使用父节点  
    if($parentNode === null){  
        $simxml = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><root></root>');  
    }else{  
        $simxml = $parentNode;  
    }  
    //遍历数组  
    foreach($arr as $k=>$v){  
        if(is_array($v)){//如果是数组的话则继续递归调用,并以该键值创建父节点  
            arr2xml($v,$simxml->addChild($k));  
        }else if(is_numeric($k)){//如果键值是数字,不能使用纯数字作为XML的标签名,所以此处加了'item'字符,这个字符可以自定义  
            $simxml->addChild('item'.$k,$v);  
        }else{//添加节点  
            $simxml->addChild($k,$v);  
        }  
    }  
    //返回数据  
    header('Content-type:text/xml;charset=utf-8');  
    return $simxml->saveXML();  
}  
echo arr2xml($arr);//输出  
?>  

XML转数组

//Xml转数组

function XmlToArr($xml)
{	
	if($xml == '') return '';
	libxml_disable_entity_loader(true);
	$arr = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);		
	return $arr;
}

xml转数组

public function xmlToArray($xml){
    //禁止引用外部xml实体
    libxml_disable_entity_loader(true);
    $values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
    return $values;

}

xml_parse_into_struct() 函数把 XML 数据解析到数组中。

该函数把 XML 数据解析到 2 个数组中:
Value 数组 - 包含来自被解析的 XML 的数据
Index 数组 - 包含指向 Value 数组中值的位置的指针
如果成功,该函数则返回 1。如果失败,则返回 0。

语法

xml_parse_into_struct(parser,xml,value_arr,index_arr)

在这里插入图片描述
XML 文件

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

PHP 代码

<?php
//invalid xml file
$xmlfile = 'test.xml';
$xmlparser = xml_parser_create();

// open a file and read data
$fp = fopen($xmlfile, 'r');
$xmldata = fread($fp, 4096);

xml_parse_into_struct($xmlparser,$xmldata,$values);

xml_parser_free($xmlparser);
print_r($values);
?>

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

微信扫一扫

微信扫一扫

微信扫一扫,分享到朋友圈

xml,数组数据转换