php解析xml(可解析任意深度)

test.xml

<users id="">

        <user id="1" title="zhangsan">
           zhangsan
        </user>
        <user id="2" title="lisi">lisi</user>
</users>


analysis_xml.php

<?php
//对xml文件进行解析
function get_xml_file($filename = 'test.xml'){
     //首先要建一个DOMDocument对象
    $domObject = new DOMDocument(); 
    //加载test.xml文件
    $domObject->load($filename);   
    //返回xml文件的根节点
    $rootObject = $domObject->documentElement;
    //根据跟节点取到xml的结构返回一个数组;
    $array = get_node_array($rootObject);
    //返回xml结构,类型为数组
    return $array;
}
//返回一个xml节点的所以子元素
function get_node_array($node)
{
   
    //定义数组返回这个xml的结构
    $array = array();
    
    //判断根节点是否还有属性
    if($node->hasAttributes())
    {
        foreach($node->attributes as $attrabute)
        {
            $array[$attrabute->nodeName]=$attrabute->nodeValue;
        }
    }   
     
    //如果根节点还有子节点
    if($node->hasChildNodes()) 
    {
         //取到根节点的所有子节点,返回一数组
         $child_array = $node->childNodes;
         //如果只用一个子节点
         
         if($child_array->length == 1)
         {
            $array[$node->firstChild->nodeName]=$node->firstChild->nodeValue;   
         }else
         {
             //开始遍历子节点 
             foreach($child_array as $child_item)
             {
                //如果这个节点不是文本节点的话,递归进行遍历
                if($child_item->nodeType != XML_TEXT_NODE)
                {
                    $array[$child_item->nodeName][] = get_node_array($child_item);
                }
             }   
         }
    }else
    {
        return $node->nodeValue;
    } 
    return $array;
}
   print_r(get_xml_file('test.xml'));
?>


输出结果:

Array ( [id] => [user] => Array ( [0] => Array ( [id] => 1 [title] => zhangsan [#text] => zhangsan ) [1] => Array ( [id] => 2 [title] => lisi [#text] => lisi ) ) )




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值