【问题标题】:Magento XML parser error when trying to create simple widget which reads from google docs csv尝试创建从 google docs csv 读取的简单小部件时,Magento XML 解析器错误
【发布时间】:2013-11-25 16:31:13
【问题描述】:

我正在尝试创建一个简单的小部件,该小部件将从谷歌文档电子表格中读取并在我的网站上打印表格。到目前为止,我在 Block 文件夹中:

<?php
class Namespace_Module_table
extends Mage_Core_Block_Abstract
implements Mage_widget_block_interface
{
protected function _toHtml()
{
    $spreadsheet_url= pathToCSV;

        if(!ini_set('default_socket_timeout',    15)) echo "<!-- unable to change socket timeout -->";

        if (($handle = fopen($spreadsheet_url, "r")) !== FALSE) 
        {
            while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
            {
                $spreadsheet_data[]=$data;
                return $spredsheet_data[];
            }
        fclose($handle);
        }
        else 
            return 'Problem reading csv';
    }
}
?>

这是一个相当基本的代码,只是为了测试它是否正确地从文件中读取,但是每当我将包含扩展名的文件夹上传到服务器时,整个开发站点就会显示:

Warning: simplexml_load_string(): Entity: line 19: parser error : Opening and ending tag mismatch: modules line 3 and config  in /home/web/lib/Varien/Simplexml/Config.php on line 510

#0 [internal function]: mageCoreErrorHandler(2, 'simplexml_load_...', '/home/uriderdev...', 510, Array)
#1 /home/uriderdev/web/lib/Varien/Simplexml/Config.php(510): simplexml_load_string('loadString('loadFile('/home/uriderdev...')
#4 /home/uriderdev/web/app/code/core/Mage/Core/Model/Config.php(318): Mage_Core_Model_Config->loadModulesConfiguration(Array, Object(Mage_Core_Model_Config))
#5 /home/uriderdev/web/app/code/local/Mage/Core/Model/App.php(406): Mage_Core_Model_Config->loadModules()
#6 /home/uriderdev/web/app/code/local/Mage/Core/Model/App.php(334): Mage_Core_Model_App->_initModules()
#7 /home/uriderdev/web/app/Mage.php(640): Mage_Core_Model_App->run(Array)
#8 /home/uriderdev/web/index.php(92): Mage::run('', 'store')
#9 {main}

我明显做错了什么吗?

编辑:这是我的 config.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<config>
    <modules>
        <module>
            <version>0.0.1</version>
        </module>
    <global>
        <helpers>
            <module>
                <class>Namespace_Module_Helper</class>
            </module>
        </helpers>
        <blocks>
            <module>
                <class>Namespace_Module_Block</class>
            </module>
        </blocks>
    </global>
</config>

【问题讨论】:

  • 非格式良好的 XML 是我的猜测。 app/code 中的 find -type f -name '*.xml' -exec xmllint --noout {} \; 可能会有所帮助。
  • 感谢回复,具体是做什么用的?
  • simplexml_load_string 堆栈跟踪不会告诉您,哪个*.xml 文件失败并切断错误输出。 xmllint 行检查是否所有找到的*.xml 文件格式正确,如果不是,则输出文件名和找到的错误。
  • 您显示的 config.xml 错过了结束 &lt;/modules&gt; 标记,顺便说一句。

标签: php magento csv xml-parsing google-drive-api


【解决方案1】:

您的 PHP 代码不是这里的问题。作为小部件模块的一部分,您已经上传了一个(可能不止一个)XML 文件。当 Magento 使用 PHP 代码读取此 XML 文件时(可能是您的 config.xml,但这是基于您列出的调用堆栈的猜测),它发现 XML 文件无效。

警告:simplexml_load_string():实体:第 19 行:解析器错误:开始和结束标记不匹配:模块第 3 行和配置

听起来您文件中的某些标签未正确平衡。解决这个问题,你就可以继续前进了。

更新:根据更新后的答案,以下

...
<modules>
    <Scooterlistwidget>
        <version>0.0.1</version>
    </Scooterlistwidget>
<global>
...

应该是

<modules>
    <Scooterlistwidget>
        <version>0.0.1</version>
    </Scooterlistwidget>
</modules>
<global>

您缺少结束 &lt;/modules&gt; 标记。

【讨论】:

  • 感谢您的回复,这是我的配置文件,对我来说一切看起来都很平衡:\ 编辑:在 cmets 中看起来很丑,将其放在原始帖子中
  • @edward 最好让计算机/编辑器确定 XML 文件的平衡性。答案已更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
相关资源
最近更新 更多