我读了this link和另一个例子。我想使用Laravel(和php7)将数组转换为XML。 这是我的代码:
public function siteMap()
{
if (function_exists('simplexml_load_file')) {
echo "simpleXML functions are available.<br />\n";
} else {
echo "simpleXML functions are not available.<br />\n";
}
$array = array (
'bla' => 'blub',
'foo' => 'bar',
'another_array' => array (
'stack' => 'overflow',
),
);
$xml = simplexml_load_string('<root/>');
array_walk_recursive($array, array ($xml, 'addChild'));
print $xml->asXML();
}
这是我的第一次尝试。它回报我:
simpleXML functions are available.
blafoostack
我的第二次尝试是:
public function siteMap()
{
$test_array = array (
'bla' => 'blub',
'foo' => 'bar',
'another_array' => array (
'stack' => 'overflow',
),
);
$this->array_to_xml($test_array);
}
private function array_to_xml(array $arr, SimpleXMLElement $xml = NULL)
{
foreach ($arr as $k => $v) {
is_array($v)
? array_to_xml($v, $xml->addChild($k))
: $xml->addChild($k, $v);
}
return $xml;
}
在这种情况下我遇到了错误:
致命错误:在null上调用成员函数addChild()
这就是我想要的:
<?xml version="1.0"?>
<root>
<blub>bla</blub>
<bar>foo</bar>
<overflow>stack</overflow>
</root>
有什么建议吗?
答案 0 :(得分:0)
请注意,您的方法签名中包含SimpleXMLElement $xml = null
:
private function array_to_xml(array $arr, SimpleXMLElement $xml = NULL)
现在,请注意您调用此方法:
$this->array_to_xml($test_array); // <--- No second parameter
这意味着变量$xml
在null
上下文中为array_to_xml()
,因为您没有提供方法和第二个参数(因此默认为NULL
)。由于您从未构建过实际元素,因此它会为您提供
致命错误:在null
上调用成员函数addChild()
您必须为方法提供必要的元素
$this->array_to_xml($test_array, new SimpleXMLElement);
或在方法
中构建元素private function array_to_xml(array $arr)
{
$xml = new SimpleXMLElement();
...
}