解析前的XML:
<item> <type>9</type> <id>3</id> <pid>0</pid> <name/> <value/> </item> <item> <type>9</type> <id>4</id> <pid>0</pid> <name>Intranet</name> <value> <ip_range> <begin>3232235521</begin> <end>3232301054</end> </ip_range> </value> </item> <item> <type>9</type> <id>837567</id> <pid>0</pid> <name>新类别</name> <value> <ip_range> <begin>2130706434</begin> <end>2130706434</end> </ip_range> <ip_range> <begin>2130706433</begin> <end>2130706433</end> </ip_range> </value> </item>解析后的XML:
问题:
一般我们的数据格式都是统一的,以便循环处理数据。第一次遇到这样子的数据我都懵逼了,跑去问c++的同事,能不能让数据格式保持一致。别没有数据的时候参数不见了;只有一个数据的时候参数不是数组,两个及以上的数据参数才是数组。得到的回复是:xml就是这样的。。。
以下是尝试过的方法
(1)使用(array)ip_range把参数类型转换为数组,失败。
上图第2个红圈的ip_range确实转换为数组了,但是本就是数组格式的ip_range数据只剩下第一条。。第二条以后的都不见了
(2)使用is_array(ip_range)判断,失败。
不管是第2个红圈还是第3个红圈的ip_range,都会返回false
(3)使用isset(ip_range[0])判断,失败。
不管是第2个红圈还是第3个红圈的ip_range,都会返回true
(4)使用count(ip_range) > 1判断,成功。
灵光一闪通过数组的长度来判断,没想到成功了!!!