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

已启用SimpleXML却报Call to undefined method错误的问题排查

问题解答

核心原因

SimpleXMLElement类本身没有实现Iterator接口,所以它根本不存在rewind()这类迭代器方法。而你提到的SimpleXmlIterator是专门实现了Iterator接口的类,自然具备rewind()、current()、next()这些迭代器必备方法。

为什么会有混淆?

你能通过foreach遍历SimpleXMLElement的子节点,是因为PHP内部对它做了隐式的迭代支持,但这不代表它本身是迭代器,不能直接调用迭代器的方法。而saveXML()是SimpleXMLElement的原生方法,和迭代器能力完全没关系,所以能正常运行。

解决办法

如果需要使用rewind()这类迭代器方法,有两种选择:

  • 直接用SimpleXmlIterator创建实例:
    $xmlIterator = new SimpleXmlIterator('<books><book>PHP Basics</book><book>XML Basics</book></books>');
    $xmlIterator->rewind(); // 此时可正常执行
    
  • 将已有的SimpleXMLElement转换为SimpleXmlIterator:
    $xmlElement = new SimpleXMLElement('<books><book>PHP Basics</book><book>XML Basics</book></books>');
    $xmlIterator = new SimpleXmlIterator($xmlElement->asXML());
    $xmlIterator->rewind();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:02:11