PHP如何将数组转换为xml

时间:2014-12-23 06:34:30

标签: php arrays xml

我正在从数组创建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>

3 个答案:

答案 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>