Php Zend:如何使用Zend_Config_XML管理多个元素具有相同名称的XML数据?
在尝试使用Php Zend:如何使用Zend_Config_XML管理多个元素具有相同名称的XML数据?,php,xml,zend-framework,zend-config-xml,Php,Xml,Zend Framework,Zend Config Xml,在尝试使用Zend_Config_XML从XML文件提取数据时,我正在寻找处理多个元素具有相同名称的数据的最佳方法。请看下面的例子 以下是XML文件: <?xml version="1.0" encoding="UTF-8" ?> <root> <stylesheets> <stylesheet>example1.css</stylesheet> <stylesheet>example
Zend_Config_XML
从XML文件提取数据时,我正在寻找处理多个元素具有相同名称的数据的最佳方法。请看下面的例子
以下是XML文件:
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<stylesheets>
<stylesheet>example1.css</stylesheet>
<stylesheet>example2.css</stylesheet>
</stylesheets>
</root>
我想做的是使用foreach循环迭代$stylesheet
数组,提取文件名,然后将样式表附加到headLink()
。这个很好用。。。但是,当
元素的数量小于2时,我会遇到问题。例如,如果我们从XML文件中删除example2.css
,我会遇到一个致命错误:对非对象调用成员函数toArray()。你会如何处理这种情况
更新1-替代SimpleXML解决方案:
就我个人而言,我使用SimpleXML解决了这个问题,因为Zend给我带来了太多的白发。即使没有
元素,这也会起作用。不幸的是,我觉得它不是很“圆滑”,我希望有一个Zend解决方案
// define path to skin XML config file
$path = './path/to/file';
if (file_exists($path)) {
// load the config file via SimpleXML
$xml = simplexml_load_file($path);
$stylesheets = (array)$xml->stylesheets;
// append each stylesheet
foreach ($stylesheets as $stylesheet) {
if (is_array($stylesheet)) {
foreach ($stylesheet as $key => $value) {
$this->setStylesheet('/path/to/css/' . $value);
}
} else {
$this->setStylesheet('/path/to/css/' . $stylesheet);
}
}
}
// function to append stylesheets
private function setStylesheet($path)
{
$this->view->headLink()->appendStylesheet($path);
}
更新2-笨重的Zend解决方案:
根据反馈,此解决方案可用于0到多个样式表
元素。。。它不是很漂亮。我希望能有一个松散耦合的设计,一个标准化的设计,可以互换使用,同时也可以简单地实现
// load the skin config file
$path = './path/to/file.xml';
if (file_exists($path)) {
$data = new Zend_Config_Xml($path, 'stylesheets');
$stylesheets = $data->toArray();
// append each stylesheet
if (array_key_exists('stylesheet', $stylesheets)) {
foreach ((array)$stylesheets['stylesheet'] as $key => $value) {
$this->view->headLink()->appendStylesheet(
'/path/to/css/' . $value);
}
}
}
如果只有1个元素,则获取数组并强制执行数组:
$data = new Zend_Config_Xml($c, 'stylesheets');
$data = $data->toArray();
var_dump((array) $data['stylesheet']);
这里有一个类似的问题:被接受的答案可以引导您找到一些可能的解决方法。感谢您将问题链接起来。对于这个特殊的问题,我有自己的解决方法,但是我认为它不是很。。。漂亮的我不是在寻找一个快速的解决方案,我试图通过查看各种响应,权衡每种方法,并通过提供一个可靠的解决方案为社区添加内容来建立最佳实践。感谢反馈,请参见上文。
$data = new Zend_Config_Xml($c, 'stylesheets');
$data = $data->toArray();
var_dump((array) $data['stylesheet']);