从Zend读取xml文件时出现问题

时间:2011-08-09 00:15:49

标签: xml zend-framework

我创建了一个简单的xml文件来存储样式表的名称,其中是我的xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<skin>
    <stylesheets>
        <stylesheet>default.css</stylesheet>
    </stylesheets>
</skin>

现在我尝试使用以下代码读取数据

protected function loadSkin() {
    $skinData = new Zend_Config_Xml('./template/'.$this -> _template.'/skins/'.$this -> _skin.'/skin.xml');
    var_dump($skinData);
    $stylesheets = $skinData -> stylesheets -> stylesheet -> toArray();
    if(is_array($stylesheets)) {
        foreach($stylesheets as $stylesheet) {
            $this -> view -> headLink() -> appendStylesheet('/template/'.$this -> _template.'/skins/' . $this -> _skin . '/css/' . $stylesheet);
        }
    }       
}

但是它给了Call to a member function toArray() on a non-object。我做错了什么?

3 个答案:

答案 0 :(得分:2)

我不会使用Zend_Config_Xml。对于初学者,它希望在XML中找到“部分”(例如“生产”,“测试”,“开发”)。为zf命名空间提供了相当大的开销。

相反,只需使用SimpleXML

$skinData = simplexml_load_file('./template/'.$this->_template.'/skins/'.$this->_skin.'/skin.xml');
foreach ($skinData->stylesheets->stylesheet as $stylesheet) {
    $this->view->headLink()->appendStylesheet(...);
}

答案 1 :(得分:2)

实际上,您的代码没有任何问题。这只是一个逻辑错误。您告诉Zend_Config_Xml将样式表解析为数组。但是由于您只提供了一个样式表,因此它不会将其解析为数组。

您的解决方案

  

只需将另一个样式表添加到xml文件中即可。

<?xml version="1.0" encoding="UTF-8"?>
<skin>
    <stylesheets>
        <stylesheet>default.css</stylesheet>
        <stylesheet>another.css</stylesheet>
    </stylesheets>
</skin>

答案 2 :(得分:0)

我发现相同...再次添加相同的css文件。 Zend打算打印一次。

<?xml version="1.0" encoding="UTF-8"?>
<skin>
    <stylesheets>
        <stylesheet>style.css</stylesheet>
        <stylesheet>style.css</stylesheet>
    </stylesheets>
</skin>