• 技术文章 >php教程 >PHP源码

    php xml 保存到array数组

    2016-06-08 17:28:31原创508

    function xmlStringToArray($xmlString)
    {
    $xmlString = preg_replace('//s','',$xmlString);
    $exitAfterManyLoops = 0;
    $xmlArray = array();
    $currentNode = &$xmlArray;
    $currentHierarchy = array();
    $currentDepth = 0;
    while($xmlString != '')
    {
    $exitAfterManyLoops++;
    if($exitAfterManyLoops > 300)
    {
    print "BREAK";
    break;
    }
    $xmlString = trim(substr($xmlString, strpos($xmlString, '<')));
    $thisNodeAscends = (substr($xmlString, 1, 1) == '//m.sbmmt.com/m/');
    $thisNodeDescends = (substr($xmlString, strpos($xmlString, '>') - 1, 1) != '//m.sbmmt.com/m/');
    $nodeName = substr($xmlString, 1, strpos($xmlString, ' ') -1);
    $openElement = substr($xmlString, strpos($xmlString, ' ') + 1);
    $openElement = substr($openElement, 0, strpos($openElement, '>') );
    if(substr($openElement, strlen($openElement) - 1, 1) == "//m.sbmmt.com/m/")
    {
    $openElement = substr($openElement, 0, strlen($openElement) - 1);
    }

    if($thisNodeAscends)
    {
    $currentDepth--;
    $currentNode = &$currentHierarchy[$currentDepth];
    }
    else
    {
    if($thisNodeDescends)
    {
    $currentNode[] = array('__attributes' => parseXmlAttributesString($openElement), '__children' => array(), '__nodeName' => $nodeName);
    $currentHierarchy[$currentDepth] = &$currentNode;
    $currentDepth++;
    $lastItem = &$currentNode[count($currentNode) - 1];
    $currentNode = &$lastItem['__children'];
    }
    else //this node is at the same level
    {
    $currentNode[] = array('__attributes' => parseXmlAttributesString($openElement), '__nodeName' => $nodeName);
    }

    }
    $xmlString = substr($xmlString, strpos($xmlString, '>') + 1);
    }
    return $xmlArray;
    }

    function parseXmlAttributesString($xmlElementString)
    {
    $exitAfter100Loops = 0;
    $xmlElementArray = array();
    while($xmlElementString != '')
    {
    $exitAfter100Loops++;
    if($exitAfter100Loops > 100)
    {
    print "BREAK";
    break;
    }
    $equalsCharacterPos = strpos($xmlElementString, '=');
    $key = trim(substr($xmlElementString, 0, $equalsCharacterPos));
    $xmlElementString = substr($xmlElementString, $equalsCharacterPos + 1);
    $openBracket = substr($xmlElementString, 0, 1);
    $xmlElementString = substr($xmlElementString, 1);
    $endBracketPos = strpos($xmlElementString, $openBracket);
    $value = substr($xmlElementString, 0, $endBracketPos);
    $xmlElementString = substr($xmlElementString, $endBracketPos + 1);
    if($key)
    {
    $xmlElementArray[$key]=$value;
    }
    }
    return $xmlElementArray;
    }

    ?>

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:nbsp xmlString xmlElementString substr openElement
    上一篇:php 读写缓存文件实例 var_export 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • php的memcache队列类• php 完美的批量生成缩略图代码• 使用php5的SoapServer扩展创建web service(1)• php正则校验用户名
    1/1

    PHP中文网