Array互转xml

方法一:

$arr = array(
'name'=> '丁三',
'age'=>29,
'job'=>array(
        'title'=>'经理',
        'salary'=>8888,
        'team'=>array('小红','小明','小华')
    )
);


function arr2xml($arr,$node=null) {
    if($node === null) {
        $simxml = new simpleXMLElement('<?xml version="1.0" encoding="utf-8"?><root></root>');
    } else {
        $simxml = $node;
    }
    // simpleXMLElement对象如何增加子节点?

    foreach($arr as $k=>$v) {
        if(is_array($v)) {
            //$simxml->addChild($k);
            arr2xml($v,$simxml->addChild($k));
        } else if(is_numeric($k)) {
           $simxml->addChild('item' . $k,$v);
        } else {
            $simxml->addChild($k,$v);
        }
    }

    return $simxml->saveXML();
}


header('content-type: text/xml');
echo arr2xml($arr);

方法二:

$xml = new DOMDocument('1.0','utf-8');
$xml->load('./dict.xml');

$dict = $xml->getElementsByTagName('dict')->item(0);

$conn = mysql_connect('localhost','root','111111');
mysql_query('use test',$conn);

$rs = mysql_query('select * from cetsix');
while($row = mysql_fetch_assoc($rs)) {
    // 每一行数据,只要写入到XML的节点中,就可以了.

    $lx = $xml->createElement('lx');
    $lx->appendChild($xml->createCDATASection($row['lx']));

    $mean = $xml->createElement('mean');
    $mean->appendChild($xml->createCDATASection($row['meaning']));

    $name = $xml->createElement('name');
    $name->appendChild($xml->createtextNode($row['word']));

    $word = $xml->createElement('word');
    $word->appendChild($name);
    $word->appendChild($mean);
    $word->appendChild($lx);

    $dict->appendChild($word); 
}
$xml->save('./dict.xml');
echo 'OK';

 上面代码生成的XML如图:

###########################################

XML转为Array

方法一:

$simxml = simplexml_load_file('./book.xml');
function toArray($sim) {
    $arr = (array) $sim;

    foreach($arr as $k=>$v) {
        if($v instanceof simplexmlelement || is_array($v)) {
            $arr[$k] = toArray($v);
        }
    }
    return $arr;
}

print_r($simxml);

方法二: Xpath来读取

$html = new DOMDocument('1.0','utf-8');
$html->loadhtmlfile('dict.html');


$xpath = new DOMXPATH($html);
$sql = '/html/body/h2';
echo $xpath->query($sql)->item(0)->nodeValue,'<br />';


// 查询id="abc"的div节点
$sql = '//div[@id="abc"]';
echo $xpath->query($sql)->item(0)->nodeValue;


// 分析第2个/div/下的p下的相邻span的第2个span的内容
$sql = '//div/p/span[2]';
echo $xpath->query($sql)->item(0)->nodeValue;

 
数据转化为xml

# 数据转化为XML格式
function arrToXml($arr, $dom = 0, $item = 0) {
    if (!$dom) {
        $dom = new DOMDocument('1.0','utf-8');
    }
    if (!$item) {
        $item = $dom->createElement("DOCUMENT");
        $dom->appendChild($item);
    }
    foreach ($arr as $key => $val) {
        if (is_string($key)) {
            $itemx = $dom->createElement($key);
            $item->appendChild($itemx);
        }
        if (!is_array($val)) {
            $text = $dom->createCDATASection($val);
            $itemx->appendChild($text);
        } else {
            if (is_numeric($key)) {
                arrToXml($val, $dom, $item);
            } else {
                arrToXml($val, $dom, $itemx);
            }
        }
    }
    return $dom->saveXML();
}

# 同样节点的生成XML函数的方法
function arrToXml($arr,$dom=0,$item=0){
    if (!$dom){
        $dom  = new DOMDocument('1.0', 'utf-8');
        $root = $dom->createElement("data");
        $dom->appendChild($root);
    }
    foreach ($arr as $key=>$val){
        if(is_numeric($key)){
            $item = $dom->createElement("custom");
            $root->appendChild($item);
        }elseif(is_string($key)){
            $node = $dom->createElement($key);
            $item->appendChild($node);
        }
        if (!is_array($val)){
            $text = $dom->createCDATASection($val);    
            $node->appendChild($text);
        }else{
            if(is_numeric($key)){
                 arrToXml($val,$dom,$item);         
            }else{
                 arrToXml($val,$dom,$node);                
            }
        }
    }
    return $dom->saveXML();
}

<data>
 <custom>
   <pid>1</pid>
   <pname>aaa</pname>
 </custom>
 <custom>
   <pid>1</pid>
   <pname>aaa</pname>
 </custom>
</data>

 

 一句话把XML转化为数组

<?php
header('Content-type:text/html;charset=utf-8');
#header('Content-type:text/xml');
$xmlurl = 'http://url';
$data   = getData($xmlurl);
$array = json_decode(json_encode(simplexml_load_string($data,null,LIBXML_NOCDATA)),true);

echo '<pre>';
print_r($array);

function getData ($url) {
    $ch     = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    $data   = curl_exec($ch);
    curl_close($ch);
    return $data;
}
?>

XML转化为Array

function xml_to_array($xml){
    $reg = "/<(w+)[^>]*>([\x00-\xFF]*)<\/\1>/";
    if(preg_match_all($reg, $xml, $matches)){
        $count = count($matches[0]);
        for($i = 0; $i < $count; $i++){
        $subxml= $matches[2][$i];
        $key = $matches[1][$i];
            if(preg_match( $reg, $subxml )){
                $arr[$key] = xml_to_array( $subxml );
            }else{
                $arr[$key] = $subxml;
            }
        }
    }
    return $arr;
}
原文地址:https://www.cnblogs.com/ahwu/p/3410767.html