我正在从数组创建xml文件。 我找到了链接How to convert array to SimpleXML 并尝试使用用户Hanmant提供的ans创建xml。
输入数组
$data = array(
'Pieces' => array(
'Piece' => array(
array(
'PieceID' => '1',
'Weight' => '0.5',
),
array(
'PieceID' => '2',
'Weight' => '2.0',
),
),
),
);
但我得到了结果
<Pieces>
<Piece>
<item0>
<PieceID>1</PieceID>
<Weight>0.5</Weight>
</item0>
<item1>
<PieceID>2</PieceID>
<Weight>2.0</Weight>
</item1>
</Piece>
</Pieces>
我怎样才能得到像
这样的结果<Pieces>
<Piece>
<PieceID>1</PieceID>
<Weight>0.5</Weight>
</Piece>
<Piece>
<PieceID>2</PieceID>
<Weight>2.0</Weight>
</Piece>
</Pieces>
答案 0 :(得分:0)
阅读the link you provided处的所有答案,其中有几种解决方案比接受的答案更好。
例如,其中一个答案提到了这个类:http://www.lalit.org/lab/convert-php-array-to-xml-with-attributes/
它不仅允许您在那里包含属性,还允许您按照自己的意愿生成XML。
答案 1 :(得分:0)
检查此网站是否可以获得您的查询答案
http://www.phpro.org/classes/PHP-Recursive-Array-To-XML-With-DOM.html
答案 2 :(得分:0)
您拥有的数组结构与answer by Hanmant的数组结构不同,因此您为该作业选择了错误的函数。
然而,当您使用递归函数执行此操作时,您要求的内容只需要很少的代码 SimpleXMLElement :
$data = array(
'Pieces' => array(
'Piece' => array(
array(
'PieceID' => '1',
'Weight' => '0.5',
),
array(
'PieceID' => '2',
'Weight' => '2.0',
),
),
),
);
$xml = create($data);
以下创建:
的定义function create($from, SimpleXMLelement $parent = null, $tagName = null)
{
if (!is_array($from)) {
if ($tagName === null) {
$parent[0] = (string) $from;
} else {
$parent->addChild($tagName, (string) $from);
}
return $parent;
}
foreach ($from as $key => $value) {
if (is_string($key)) {
if ($parent === null) {
$parent = new SimpleXMLElement("<$key/>");
create($value, $parent);
break;
}
create($value, $parent, $key);
} else {
create($value, $parent->addChild($tagName));
}
}
return $parent;
}
此函数首先处理字符串值以设置元素的节点值。然后遍历数组,该数组至少具有单个元素或多个元素的标记名。如果文档尚不存在,则创建它并将元素子项添加到它(递归)。否则只添加子元素(递归)。
这是几乎没有错误处理的示例代码,因此请注意遵循您在问题中概述的数组格式。
输出(美化):
<?xml version="1.0"?>
<Pieces>
<Piece>
<PieceID>1</PieceID>
<Weight>0.5</Weight>
</Piece>
<Piece>
<PieceID>2</PieceID>
<Weight>2.0</Weight>
</Piece>
</Pieces>