• 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;
    }
  • 相关阅读:
    静态检查lua语法工具luacheck
    centos7系列:
    git submodule 教程
    CENTOS 7 安装redis
    python基本语法:
    彻底理解lib和dll
    C++语言的设计与演化(空白):
    《Effective C++》 目录:
    C++进阶书籍(转)
    学习的心态(转)
  • 原文地址:https://www.cnblogs.com/ahwu/p/3410767.html
Copyright © 2020-2023  润新知