使用PHP从SOAP API响应的SimpleXML中提取MenuItemDefinitions字段值
实现方法
你返回的结果中MenuItemDefinitions字段本身是一段独立的XML字符串,需要先提取这段内容做二次解析,之后就可以正常提取指定字段,完整的后续处理代码如下:
// 从已有解析结果中获取配置响应节点 $configRes = $res->GetConfigurationInfoResponse->configInfoResponse; // 先判断接口请求结果是否正常 if (strval($configRes->OperationalResult->Success) !== 'true') { exit('接口调用失败:' . strval($configRes->OperationalResult->ErrorMessage)); } // 提取MenuItemDefinitions中嵌套的XML字符串,二次解析为SimpleXML对象 $menuXmlStr = strval($configRes->MenuItemDefinitions); $menuList = simplexml_load_string($menuXmlStr); // 遍历所有菜品条目,提取需要的字段 $menuData = []; foreach ($menuList->DbMenuItemDefinition as $item) { $menuData[] = [ '菜品ID' => strval($item->MenuItemDefID), '菜品名称' => strval($item->Name1->StringText), '菜品分类ID' => strval($item->MenuItemMasterID), '是否售罄' => strval($item->OutOfMenuItem) // 可根据需求自行添加其他需要提取的字段,字段名和XML内节点名一致即可 ]; } // 打印测试结果 print_r($menuData);
注意要点
- SimpleXML返回的节点默认是SimpleXMLElement对象,用
strval()转成字符串后再做后续存储或逻辑处理,避免出现类型错误 - 要提取其他字段直接对应
MenuItemDefinitions内部XML的节点名取值即可,比如要获取打印类编号就取strval($item->PrintClassObjNum)
内容的提问来源于stack exchange,提问作者Thanuja
相关产品推荐
相关产品推荐

