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

WordPress PHP中如何读取外部API返回XML的子元素数据?

解决XML中FullName字段的读取问题

你的问题核心出在XML命名空间未处理和JSON转换导致的结构认知错误上,以下是具体修正方案:

问题拆解

  1. 目标XML的根节点ResponseDS带有默认命名空间http://tempuri.org/,SimpleXML默认不会自动识别命名空间,直接访问节点会失效
  2. 将SimpleXMLElement转JSON再解析属于冗余操作,不仅会丢失命名空间信息,还会改变原XML的节点层级结构,导致你写的访问路径完全错误

方案一:直接用SimpleXML处理命名空间(推荐)

通过注册命名空间+XPath定位,无需多余转换:

$xml = wp_remote_retrieve_body($response);
$xmlObj = simplexml_load_string($xml);

// 注册默认命名空间,前缀可自定义(示例用`t`)
$xmlObj->registerXPathNamespace('t', 'http://tempuri.org/');

// 用XPath精准定位FullName节点
$fullNameNodes = $xmlObj->xpath('//t:DS/diffgr:diffgram/NewDataSet/Table/FullName');

if (!empty($fullNameNodes)) {
    $name = (string)$fullNameNodes[0];
    echo "<h2>$name</h2>"; // 输出:Prof. Phil Brown
}

方案二:修正JSON转换后的访问路径(不推荐)

如果坚持要转JSON,需修正节点访问路径:

$xml = wp_remote_retrieve_body($response);
$xmlObj = simplexml_load_string($xml);
$json = json_encode($xmlObj);
$data = json_decode($json);

// 正确路径:根节点直接对应DS等子节点,不存在`object`层级
$name = $data->DS->diffgram->NewDataSet->Table->FullName;
echo "<h2>$name</h2>";

方案三:用DOMDocument解析

若对XPath更熟悉,可使用DOMDocument实现:

$xml = wp_remote_retrieve_body($response);
$dom = new DOMDocument();
$dom->loadXML($xml);
$xpath = new DOMXPath($dom);

// 注册命名空间
$xpath->registerNamespace('t', 'http://tempuri.org/');

$fullNameNode = $xpath->query('//t:DS/diffgr:diffgram/NewDataSet/Table/FullName')->item(0);
if ($fullNameNode) {
    $name = $fullNameNode->nodeValue;
    echo "<h2>$name</h2>";
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:10:37