我用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')));
添加回答
舉報
0/150
提交
取消