Laravel新手开发手机充值App登录时遇DOMDocument参数类型错误求助
解决Laravel中DOMDocument::loadXML()参数类型错误
错误核心原因:调用
DOMDocument::loadXML()时传入了数组,而该方法要求第一个参数必须是字符串格式的XML内容。大概率是对接手机充值相关第三方接口后,把接口返回的数组直接传给了loadXML(),而非先转为XML字符串,或是误将非XML格式的接口返回当作XML处理。排查与修复步骤:
- 定位错误代码:通过错误堆栈找到调用
loadXML()的具体文件和行号,检查传入该方法的变量类型。 - 回滚curl文件修改:不要随意修改Laravel核心的curl相关文件(如
vendor目录下的文件),修改会导致依赖混乱,执行composer install恢复核心文件。 - 针对性处理接口返回:
- 若接口返回JSON/数组:直接用
json_decode()(针对JSON字符串)解析后操作数组即可,无需调用loadXML()。 - 若需将数组转为XML:使用自定义函数转换数组为XML字符串后再传入
loadXML(),示例代码:
调用该函数得到字符串后,再传入function arrayToXml($data, $rootNode = 'root', $xml = null) { if ($xml === null) { $xml = new DOMDocument('1.0', 'UTF-8'); $xml->appendChild($xml->createElement($rootNode)); } $parent = $xml->documentElement; foreach ($data as $key => $value) { $element = $xml->createElement(is_numeric($key) ? 'item' : $key); $parent->appendChild($element); is_array($value) ? arrayToXml($value, $key, $xml) : $element->appendChild($xml->createTextNode($value)); } return $xml->saveXML(); }loadXML()即可。
- 若接口返回JSON/数组:直接用
- 定位错误代码:通过错误堆栈找到调用
内容的提问来源于stack exchange,提问作者Feezlinkz Cooperation
相关产品推荐
相关产品推荐

