为了账号安全,请及时绑定邮箱和手机立即绑定

PHP解析XML?

PHP解析XML?

PHP
实在忍不住了 2017-02-08 15:16:08
我用PHP解析 bpmn生成的XML文件,但是生成的XML文件很复杂,解析出来的有数据丢失$xmlfile = 'test.xml';$xmlparser = xml_parser_create();// 打开文件并读取数据$fp = fopen($xmlfile, 'r');$xmldata = fread($fp, 4096);xml_parse_into_struct($xmlparser,$xmldata,$values);xml_parser_free($xmlparser);echo json_encode($values);有数据丢失也用了递归的方式解析,也有丢失/对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(json_encode(get_xml_file('test.xml')));
查看完整描述

1 回答

?
512205584

TA贡献2条经验 获得超2个赞

用simplexml

查看完整回答
反对 回复 2017-02-16
  • 1 回答
  • 0 关注
  • 1211 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信