方法一:
$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; }