PHP解析许可证服务器XML转数组返回前端时License数组为空问题
问题解决:SimpleXML解析XML后无法获取License数组的问题
你的代码无法获取License数据的核心原因是对SimpleXML解析后的节点结构理解错误,同时缺少数组初始化存在潜在报错风险,以下是具体修正方案:
错误原因分析
服务器返回的XML根节点是<CustomerData>,调用simplexml_load_string($result)后,$xml对象直接指向这个根节点,而非$xml->CustomerData。你的代码错误地尝试通过$xml->CustomerData访问子节点,自然无法找到License数据。另外$licenses变量未提前初始化,若进入error分支会导致json_encode时出现未定义变量的错误。
修正后的代码
// 初始化空数组,避免未定义错误 $licenses = []; $xml = simplexml_load_string($result); // 直接检查$xml下的License节点,因为$xml就是CustomerData根节点 if (!empty($xml->License)) { foreach ($xml->License as $license) { $licenseID = (string) $license->LicenseID; $productID = (string) $license->ProductID; $licenses[] = [ 'licenseID' => $licenseID, 'productID' => $productID ]; } } else { error_log('未找到License数据或XML解析失败'); } echo json_encode(['licenses' => $licenses]);
关键调试技巧
如果后续再遇到XML解析问题,可以用print_r($xml)输出解析后的SimpleXML对象结构,直观查看节点层级:
print_r($xml);
针对你的XML,输出结果会类似:
SimpleXMLElement Object ( [Customer] => SimpleXMLElement Object ( [FirstName] => TEST FIRST [LastName] => TEST LAST ) [License] => Array ( [0] => SimpleXMLElement Object ( [LicenseID] => 11223344 [ProductID] => 5448 ) [1] => SimpleXMLElement Object ( [LicenseID] => 11223345 [ProductID] => 4444 ) ) )
内容的提问来源于stack exchange,提问作者Hyun Mo Luke Yang
相关产品推荐
相关产品推荐

