如何通过PHP变量中的路径字符串访问SimpleXML元素?
动态路径访问SimpleXML节点的解决方法
直接使用$xml->$path无法生效,因为->是SimpleXML的节点访问操作符,并非节点名称的一部分,不能直接作为属性名传递。你需要把路径拆分为单个节点名,再逐个遍历访问:
实现步骤
- 用
explode()将路径字符串按->分割成节点名称数组 - 从根节点
$xml开始,依次遍历每个节点名,逐步定位到目标节点 - 可选:添加节点不存在的错误处理逻辑
代码示例
$xml = simplexml_load_file('example.com'); $path = 'shop->offers->offer'; // 拆分路径为节点名数组 $nodeNames = explode('->', $path); $targetElement = $xml; // 遍历节点路径 foreach ($nodeNames as $name) { if (isset($targetElement->$name)) { $targetElement = $targetElement->$name; } else { // 节点不存在时的处理,这里设为null,也可抛出异常 $targetElement = null; break; } } // 输出结果 print_r($targetElement);
如果目标路径指向的是多个节点(比如offer是集合),上述代码会返回对应的SimpleXML节点集合,可直接遍历使用。
内容的提问来源于stack exchange,提问作者Rediska
相关产品推荐
相关产品推荐

