php xml 文件读取 XMLReader

php xml 文件读取

<?php
/**
$xmlString = '<xml>
        <persons count="10">
            <person username="username1" age="20">this is username1 description</person>
            <person username="username2" age="20">this is username2 description</person>
        </persons>
    </xml>';
    
$mXmlTest = new XmlTest();
$dataList = $mXmlTest->parseXmlStr($xmlString);
print_r($dataList);

$xmlFile = './test.xml';
$dataList = $mXmlTest->parseXmlFile($xmlFile);
print_r($dataList);

 */


class XmlTest{
        
//     <xml>
//         <persons count="10">
//             <person username="username1" age="20">this is username1 description</person>
//             <person username="username2" age="20">this is username2 description</person>
//         </persons>
//     </xml>
    
    /**
     * 解析返回的XML文档
     */
    public function parseXmlFile($xmlFile){
        $reader = new \XMLReader();
        $reader->open($xmlFile, 'UTF-8');
        $nodeName = '';
        $dataList = array();
        $data = array();
        while ($reader->read()){
            if($reader->nodeType == \XMLReader::ELEMENT){
                $nodeName = $reader->name;
                if($nodeName=='persons'){
                    $count = $reader->getAttribute('count');
                    if(!($count>0)){
                        break;
                    }
                }
                elseif($nodeName=='person'){
                    $data = array(
                        'username'=>$reader->getAttribute('username'),
                        'age'=>$reader->getAttribute('age'),
                    );
                }
            }
            if($reader->nodeType == \XMLReader::TEXT && !empty($nodeName)){
                if($nodeName=='person'){
                    $data['description'] = strtolower($reader->value);
                    $dataList[] = $data;
                }
            }
        }
        $reader->close();
        return $dataList;
    }
    
    /**
     * 解析返回的XML文档
     */
    public function parseXmlStr($xmlString){
        $reader = new \XMLReader();
        $reader->xml($xmlString,'UTF-8');
        $nodeName = '';
        $dataList = array();
        $data = array();
        while ($reader->read()){
            if($reader->nodeType == \XMLReader::ELEMENT){
                $nodeName = $reader->name;
                if($nodeName=='persons'){
                    $count = $reader->getAttribute('count');
                    if(!($count>0)){
                        break;
                    }
                }
                elseif($nodeName=='person'){
                    $data = array(
                        'username'=>$reader->getAttribute('username'),
                        'age'=>$reader->getAttribute('age'),
                    );
                }
            }
            if($reader->nodeType == \XMLReader::TEXT && !empty($nodeName)){
                if($nodeName=='person'){
                    $data['description'] = strtolower($reader->value);
                    $dataList[] = $data;
                }
            }
        }
        return $dataList;
    }
}

 

转载于:https://www.cnblogs.com/xiaoyaogege/p/6212161.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值