读取xml文和数组转化为xml文件

示例的xml文件代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<req:KnownTrackingRequest xmlns:req="http://www.dhl.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.dhl.com
TrackingRequestKnown.xsd">
<Request>
<ServiceHeader>
<MessageTime>2002-06-25T11:28:56-08:00</MessageTime>
<MessageReference>1234567890123456789012345678</MessageReference>
<SiteID>TestSiteID</SiteID>
<Password>testPwd</Password>
</ServiceHeader>
</Request>
<LanguageCode>en</LanguageCode>
<AWBNumber>8833321221</AWBNumber>
<AWBNumber>7378615484</AWBNumber>
<AWBNumber>8882774666</AWBNumber>
<LevelOfDetails>ALL_CHECK_POINTS</LevelOfDetails>

</req:KnownTrackingRequest>
相应的php代码;
$xml=file_get_contents("test.xml");//读取文件
$data = json_decode(json_encode(simplexml_load_string($xml)),1);//将文件转化为数组

//修改对应的文件参数
$data['AWBNumber']=array("23432524","432432432");
$data['Request']['ServiceHeader']['SiteID']='123';
$data['Request']['ServiceHeader']['Password']='123';


/**
* 转化函数
* @param $arr 传入数组
* @param bool|false $xml
* @param string $key1
* @top string 头部
* @return mixed 返回字符串
*
*/
function array2xml($arr,$xml=false,$key1="",$top='<root />'){
    if($xml===false){
$xml=new SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?>'.$top);
}

if($arr==array_values($arr)){
foreach ($arr as $key=>$value) {
if(is_numeric($key)){
if(is_array($value)){
self::array2xml($value,$xml->addChild($key1),"",$top);
}else{
$xml->addChild($key1,$value);
}
}else{
if(is_array($value)){
self::array2xml($value,$xml->addChild($key1),$key,$top);
}else{
$xml->addChild($key1,$value);
}
}
}
}else{
if($key1){
$child=$xml->addChild($key1);
}else{
$child=$xml;
}
foreach ($arr as $key=>$value) {
if(is_array($value)){
self::array2xml($value,$child,$key,$top);
}else{
$child->addChild($key,$value);
}
}
}
return $xml->asXml();
}

//返回新的xml字符串

$
newxml=array2xml($data,false,"",'<KnownTrackingRequest xmlns:req="http://www.dhl.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.dhl.com
TrackingRequestKnown.xsd" />')
//由于头部为req:KnownTrackingRequest 时会为所有的元素加上req:,单独提取出来替换,得到相同的xml字符串
$newxml=str_replace("KnownTrackingRequest","req:KnownTrackingRequest",$newxml);
print_r($newxml);






posted on 2016-12-02 14:03  月下华光  阅读(490)  评论(0编辑  收藏  举报

导航