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

在PHP中如何获取XML中name="Total"的属性及其对应值?

获取XML中指定name属性的节点值(位置不固定场景)

嘿,我来帮你搞定这个问题!你想抓取XML里name="Total"的<antwoord>节点的属性和对应值,而且这个节点的位置还不固定对吧?你的现有代码没定位到正确的节点,所以拿不到想要的结果,我给你两种实用的解决方案:

方案一:用XPath精准定位(推荐)

XPath可以直接在整个XML文档里匹配符合条件的节点,不管它在哪个层级,非常适合节点位置不固定的场景。

// 加载XML文件
$xml = simplexml_load_file($url);
// 使用XPath查询所有name属性为"Total"的antwoord节点
$totalNodes = $xml->xpath('//antwoord[@name="Total"]');

if (!empty($totalNodes)) {
    $totalNode = $totalNodes[0];
    // 获取name属性的取值
    $nameAttribute = (string)$totalNode->attributes()->name;
    // 获取节点对应的文本值
    $nodeValue = (string)$totalNode;
    echo "属性name的值:{$nameAttribute},对应内容:{$nodeValue}";
} else {
    echo "未找到name为Total的节点";
}

代码说明:

  • //antwoord[@name="Total"]:这个XPath表达式的意思是在XML的任意层级中,查找所有带有name="Total"属性的<antwoord>节点
  • 因为XPath返回的是节点数组,所以先判断是否为空,再取第一个匹配的节点(如果有多个符合条件的节点,可以循环遍历处理)
  • 要把SimpleXMLElement对象转成字符串((string)),不然直接输出会得到对象信息,不是实际的文本内容

方案二:遍历节点逐一判断

如果不想用XPath,也可以遍历所有<antwoord>节点,逐个检查name属性是否符合要求:

$xml = simplexml_load_file($url);
// 遍历resultaat下的所有antwoord节点
foreach ($xml->resultaten->resultaat->antwoord as $antwoord) {
    $currentName = (string)$antwoord->attributes()->name;
    if ($currentName === 'Total') {
        $currentValue = (string)$antwoord;
        echo "属性name的值:{$currentName},对应内容:{$currentValue}";
        break; // 找到目标节点后跳出循环,提升效率
    }
}

为什么你的原代码不行?

你之前写的$xml->resultaten->resultaat->attributes()是在取<resultaat>节点的属性,但这个节点本身并没有任何属性,而且你根本没定位到<antwoord>节点,所以自然输出不了想要的结果~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:24:15