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

PHP SimpleXML获取节点名称问题:已有方案无法生效

解决PHP SimpleXML获取节点名称的问题

嘿,我明白你遇到的麻烦了——用xpath('./name()')确实没法在SimpleXML里正确获取节点标签名,咱们一步步来搞定它:

为什么原来的方法行不通?

  • SimpleXML的xpath()方法执行后,返回的是SimpleXMLElement对象数组或字符串数组,但name()是XPath节点函数,直接这么调用的话,SimpleXML没法正确解析返回结果;
  • 你还漏了代码末尾的分号,这也会导致语法错误。

正确的解决方案:使用getName()方法

SimpleXMLElement类自带了getName()方法,专门用来获取当前节点的标签名称,这是最直接高效的方式。

修改你的代码如下:

//获取MyRefNode的祖父节点
$GrandParents = $MyXml->xpath('//MyRefNode/../..');
//遍历祖父节点
foreach ($GrandParents as $GrandParent){
    //统计每个祖父节点的子节点数量
    $count = $GrandParent->count();
    echo '<br/> Children count = '.$count;
    //获取祖父节点标签名 - 现在可以正常生效了
    $TName = $GrandParent->getName();
    echo '<br/> Tag Name = '.$TName;
}

备选方案:用XPath的local-name()函数

如果你一定要用XPath来获取节点名称,可以使用local-name(.)表达式,不过需要注意它返回的是一个数组,要取第一个元素:

$TName = $GrandParent->xpath('local-name(.)')[0];

不过这个方法不如getName()简洁,更推荐使用前者。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:30:12