You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从PHP Guzzle请求的XML响应中提取ID、NAME为键值对数组

解决方法

你解析失败的核心原因是XML携带了命名空间,实际有效数据存放在diffgr:diffgram节点下,没有直接暴露在根节点中,且SimpleXMLElement节点需强制转为字符串才能拿到实际文本值,不能直接序列化处理。

可用代码示例

// 1. 加载XML响应内容
$xml = simplexml_load_string($results);

// 2. 提取diffgr命名空间下的diffgram节点
$diffgram = $xml->children('urn:schemas-microsoft-com:xml-diffgram-v1')->diffgram;

// 3. 提取无命名空间的NewDataSet节点
$newDataSet = $diffgram->children('')->NewDataSet;

// 4. 提取Table节点并转为键值对数组
// 单条数据场景
$user = [
    'ID' => (string)$newDataSet->Table->ID,
    'NAME' => (string)$newDataSet->Table->NAME
];

// 多条Table数据场景用循环
// $userList = [];
// foreach ($newDataSet->Table as $table) {
//     $userList[] = [
//         'ID' => (string)$table->ID,
//         'NAME' => (string)$table->NAME
//     ];
// }

补充说明

  • 直接打印SimpleXMLElement对象只会显示对象标识,不会输出节点内容,必须通过->节点名的方式访问对应字段
  • 所有节点取值都需要加(string)强制转为字符串类型,否则拿到的是SimpleXMLElement对象实例,无法直接作为字符串使用
  • 不要直接对SimpleXMLElement对象做json_encode处理,该对象包含很多内置私有属性,序列化后不会返回你需要的业务字段

内容的提问来源于stack exchange,提问作者Ayomikun Samuel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:27:04