【发布时间】:2019-02-27 22:29:08
【问题描述】:
我在创建多维 SimpleXMLElement 时遇到了一些问题,它适用于简单数组,但是当存在多维数组时,SimpleXMLElement 不会写入多维 SimpleXMLEelement。像这样:
createXML 函数:
public function createXML($data, $root = null) {
$xml = new \SimpleXMLElement($root ? '<' . $root . '/>' : '<marathon/>');
array_walk_recursive($data, function($value, $key)use($xml){
$xml->addChild($key, $value);
});
$dom = dom_import_simplexml($xml)->ownerDocument;
$dom->encoding = "UTF-8";
$dom->formatOutput = true;
print $dom->saveXML();
}
打印如下:
<marathon>
<media_id>FACE</media_id>
<agreement_id>****</agreement_id>
<client_reference>123456</client_reference>
<client_contact>Asim</client_contact>
<plan_number>407</plan_number>
<plan_name>TEST</plan_name>
<cuid>123456</cuid>
<status>P</status>
<colour>0</colour>
<insertion_date>2018-09-19</insertion_date>
<end_date>2018-09-20</end_date>
<client_reference>1234</client_reference>
<price_code>0</price_code>
<number_of_units>250000</number_of_units>
<gross>1000</gross>
<comment>THIS IS A TEST DO NOT FAKTURER</comment>
</marathon>
当我想要的是:
<marathon>
<media_id>FACE</media_id>
<agreement_id>REDP</agreement_id>
<client_reference>123456</client_reference>
<client_contact>Asim Tariq</client_contact>
<plan_number>407</plan_number>
<plan_name>TEST</plan_name>
<cuid>123456</cuid>
<status>P</status>
<colour>0</colour>
<insertion>
<insertion_date>2018-09-19</insertion_date>
<end_date>2018-09-20</end_date>
<client_reference>1234</client_reference>
<price_row>
<price_code>0</price_code>
<number_of_units>250000</number_of_units>
<gross>1000</gross>
<comment>THIS IS A TEST DO NOT FAKTURER</comment>
</price_row>
</insertion>
</marathon>
如何使用createXML 中的代码管理此问题? XML 不是多维的?
这是我发送的数组 $data:
[
"media_id" => 'FACE',
"agreement_id" => 'REDP',
"client_reference" => 123456,
"client_contact" => "Asim Tariq",
"plan_number" => 407,
"plan_name" => "TEST",
"cuid" => 123456,
"status" => 'P',
"colour" => 0,
"insertion" => [
"insertion_date" => '2018-09-19',
"end_date" => '2018-09-20',
"client_reference" => 1234,
"price_row" => [
"price_code" => 000,
"number_of_units" => 250000,
"gross" => 1000,
"discount" => [
],
"comment" => "THIS IS A TEST DO NOT FAKTURER",
],
],
]
【问题讨论】:
-
好吧,现在您只是将元素附加到根元素
$xml->addChild()- 因此必须相应地更改该部分,以某种方式将正确的当前父元素传递给一起工作。 -
@PhilippMaurer 它不是重复的。我不仅无法将元素添加到根目录。您提供的链接未提供此详细信息。
-
是的@misorude 看起来甚至缺少“插入”键,并且该数组中的键/值放在根元素上。我怎样才能使它成为一个键并在 XML 中添加元素?
-
你试过this回答吗?
-
“看起来连“插入”键都丢失了” - 可能是因为在这种情况下您也尝试执行
addChild($key, $value),甚至尽管这种情况下的值本身就是一个数组。您需要区分这两种情况。不确定array_walk_recursive是否是解决此问题的最佳方式;递归调用自身的自写函数可能是更好的选择。
标签: php arrays xml multidimensional-array