在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
相关产品推荐
相关产品推荐

