如何轻松调试布局Xml警告/错误?

前端之家收集整理的这篇文章主要介绍了如何轻松调试布局Xml警告/错误?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我遇到了这个错误
Warning: simplexml_load_string(): Entity: line 46: parser error : Comment not terminated  in */lib/Varien/Simplexml/Config.PHP on line 510

Entity: line 46: parser error : Start tag expected,'<' not found  in */lib/Varien/Simplexml/Config.PHP on line 510

很明显,在某些Xml文件中存在问题,但我真的不容易找到大干草堆中的针头:)

有什么好的做法吗?
如果可能的话,我想找一个涉及使用Xdebug或一些日志的好习惯.

在Magento中花了很多时间来拼错拼写.

我想你可以看一下这篇文章 Dealing with XML errors.

此警告与某些config.xml错误有关,因此找到确切文件的可能解决方法是mod. /lib/Varien/Simplexml/Config.PHP类.

你应该修改Varien_Simplexml_Config :: loadString()方法

public function loadString($string)
{
    if (is_string($string)) {
        // Enable internal errors
        libxml_use_internal_errors(true);
        $xml = simplexml_load_string($string,$this->_elementClass);
        if (false === $xml) {
            // Put breakpoint here
            $errors = libxml_get_errors();
        }
        if ($xml instanceof Varien_Simplexml_Element) {
            $this->_xml = $xml;
            return true;
        }
    } else {
        Mage::logException(new Exception('"$string" parameter for simplexml_load_string is not a string'));
    }
    return false;
}

如果错误与某些布局文件有关(Update.PHP第444行警告)

您应该以类似的方式修改Mage_Core_Model_Layout_Update :: getFileLayoutUpdatesXml()方法

public function getFileLayoutUpdatesXml($area,$package,$theme,$storeId = null)
{
    if (null === $storeId) {
        $storeId = Mage::app()->getStore()->getId();
    }
    /* @var $design Mage_Core_Model_Design_Package */
    $design = Mage::getSingleton('core/design_package');
    $layoutXml = null;
    $elementClass = $this->getElementClass();
    $updatesRoot = Mage::app()->getConfig()->getNode($area.'/layout/updates');
    Mage::dispatchEvent('core_layout_update_updates_get_after',array('updates' => $updatesRoot));
    $updateFiles = array();
    foreach ($updatesRoot->children() as $updateNode) {
        if ($updateNode->file) {
            $module = $updateNode->getAttribute('module');
            if ($module && Mage::getStoreConfigFlag('advanced/modules_disable_output/' . $module,$storeId)) {
                continue;
            }
            $updateFiles[] = (string)$updateNode->file;
        }
    }
    // custom local layout updates file - load always last
    $updateFiles[] = 'local.xml';
    $layoutStr = '';
    foreach ($updateFiles as $file) {
        $filename = $design->getLayoutFilename($file,array(
            '_area'    => $area,'_package' => $package,'_theme'   => $theme
        ));
        if (!is_readable($filename)) {
            continue;
        }
        $fileStr = file_get_contents($filename);
        $fileStr = str_replace($this->_subst['from'],$this->_subst['to'],$fileStr);   


        libxml_use_internal_errors(true);
        $fileXml = simplexml_load_string($fileStr,$elementClass);


        if (false === $fileXml) {
            // Put breakpoint here
            $errors = libxml_get_errors();
            $err = array($filename,$errors);
            // error detail and file name will be printed
            Zend_Debug::dump($err);
            die();
        }



        if (!$fileXml instanceof SimpleXMLElement) {
            continue;
        }
        $layoutStr .= $fileXml->innerXml();
    }
    $layoutXml = simplexml_load_string('<layouts>'.$layoutStr.'</layouts>',$elementClass);
    return $layoutXml;
}

现在只需重新加载页面即可读取错误信息.

原文链接:https://www.f2er.com/xml/293153.html

猜你在找的XML相关文章