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

如何解析WebService SOAP返回的PHP数组格式响应

处理SOAP返回的PHP数组格式响应

嘿,我懂你现在的困扰——这个SOAP接口居然返回了类似var_export/var_dump格式的字符串,而非标准结构化数据,确实有点折腾人。不过别担心,咱们一步步把它搞定。

第一步:将字符串转为真实PHP数组

首先你得从SOAP响应里提取出<return>标签内的Array (...)字符串。接下来可以用PHP的eval()函数把它转成实际数组(重要提醒:仅在你完全信任这个接口返回内容的情况下使用eval(),因为它会执行任意代码,存在安全风险)。

示例代码:

// 假设你已经从SOAP响应中提取到return标签内的字符串
$responseStr = 'Array ( [0] => Array ( [CDATTRIBUTE] => 49 [NMATTRIBUTE] => SD1-ACCION [FGDATATYPE] => 1 [FGATTRIBUTETYPE] => 1 [NMLABEL] => Doc_Acción de la Normativa [FGMULTIVALUED] => 1 [VALUE] => Array ( [1721] => Formula [1477] => Aprueba [1486] => Describe [1506] => Reglamenta [1522] => Constituye [2128] => Agrega [1485] => Deroga [1497] => Oficializa ) ) )';

// 转换为真实PHP数组
eval("\$dataArray = $responseStr;");

// 验证转换结果
print_r($dataArray);

要是你不想用eval(),也可以用正则表达式解析字符串,但复杂度会高很多。对于可信数据源的简单场景,eval()是最高效的方案。

第二步:提取[VALUE]中的值并整理

拿到真实数组后,提取VALUE里的内容就很轻松了,下面是转成列表和XML的两种方案:

整理为无序列表

示例代码:

// 取出VALUE数组
$valueArray = $dataArray[0]['VALUE'];
// 提取纯值(去掉原键名)
$valueList = array_values($valueArray);

// 输出无序列表
foreach ($valueList as $item) {
    echo "- $item\n";
}

输出结果:

  • Formula
  • Aprueba
  • Describe
  • Reglamenta
  • Constituye
  • Agrega
  • Deroga
  • Oficializa

整理为XML格式

用PHP的DOMDocument生成标准XML:

// 初始化XML文档
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->formatOutput = true;

// 创建根节点
$root = $dom->createElement('ActionValues');
$dom->appendChild($root);

// 遍历VALUE数组生成子节点
foreach ($valueArray as $key => $value) {
    $itemNode = $dom->createElement('Action');
    // 可选:保留原键作为id属性
    $itemNode->setAttribute('id', $key);
    $itemNode->nodeValue = $value;
    $root->appendChild($itemNode);
}

// 输出XML
echo $dom->saveXML();

生成的XML示例:

<?xml version="1.0" encoding="UTF-8"?>
<ActionValues>
  <Action id="1721">Formula</Action>
  <Action id="1477">Aprueba</Action>
  <Action id="1486">Describe</Action>
  <Action id="1506">Reglamenta</Action>
  <Action id="1522">Constituye</Action>
  <Action id="2128">Agrega</Action>
  <Action id="1485">Deroga</Action>
  <Action id="1497">Oficializa</Action>
</ActionValues>

额外小建议

如果这个SOAP接口是你有权限提议修改的,最好让开发者改成返回标准XML或JSON格式,后续处理会更安全省心。要是没法修改接口,上面的方法完全能解决你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 10:07:42