如果节点名称相同,则PHP XML编写器不生成XML
我正在尝试从关联数组生成xml数据 我的数组是如果节点名称相同,则PHP XML编写器不生成XML,php,xml,parsing,Php,Xml,Parsing,我正在尝试从关联数组生成xml数据 我的数组是 $data = array( 'item' => array( 'id' => '1', 'name' => 'bar1', 'price' => '10', 'description' => '', 'image_link_small' => '', 'image_link_big' => ''
$data = array(
'item' => array(
'id' => '1',
'name' => 'bar1',
'price' => '10',
'description' => '',
'image_link_small' => '',
'image_link_big' => ''
),
'item' => array(
'id' => '2',
'name' => 'bar2',
'price' => '20',
'description' => '',
'image_link_small' => '',
'image_link_big' => ''
),
'item' => array(
'id' => '3',
'name' => 'bar3',
'price' => '30',
'description' => '',
'image_link_small' => '',
'image_link_big' => ''
),
'item' => array(
'id' => '4',
'name' => 'bar4',
'price' => '40',
'description' => '',
'image_link_small' => 'link1',
'image_link_big' => 'link2'
)
);
我的php数组到xml转换器代码是
public function convertArrayToXML($data, $rootElement = 'root', $startDoc = '1.0', $xml_encoding = 'UTF-8') {
$xml = new XmlWriter();
$xml->openMemory();
$xml->startDocument($startDoc, $xml_encoding);
$xml->startElement($rootElement);
function write(XMLWriter $xml, $data) {
foreach ($data as $key => $value) {
if (is_array($value)) {
$xml->startElement($key);
write($xml, $value);
$xml->endElement();
continue;
}
$xml->writeElement($key, $value);
}
}
write($xml, $data);
$xml->endElement();
return $xml->outputMemory(true);
}
但它只给我最后一个节点的输出xml
<root>
<item>
<id>4</id>
<name>bar4</name>
<price>40</price>
<description/>
<image_link_small>link1</image_link_small>
<image_link_big>link2</image_link_big>
</item>
</root>
4.
bar4
40
链接1
链接2
如果我将数组中的项更改为项1、项2、项3、项4,它将给我
正确的xml数据。有什么问题吗
谢谢这不是XML编写器的问题。试一试
var_dump($data)代码>
你会发现问题所在。在PHP数组中不能多次使用同一个键。在$data
数组中,键值是相同的,这就是前三个值被最后一个值覆盖的原因。请尝试以下操作:
$data = array(
'item1' => array(.....),
'item2' => array(.....),
'item2' => array(.....)
)
那么如何在xml数据中实现多个项节点呢?向数组中添加另一个“维度:item'=>array(array(id=>2,…)、array(id=>3,…)
或者,如果您知道此数组只有项,只需重命名数组:$items=>array(array('id'=>1…)转换为XML的过程正是它对您提供的数据应该做的。尝试在定义数组后立即转储它。您会发现每个元素都覆盖了它前面的元素,因为每个元素都有相同的名称,只留下最后一个元素。