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

