用PHP生成XML文件

时间:2018-01-31 13:09:10

标签: php xml

我正在尝试从PHP数组生成XML文件。 一切似乎都运行良好,但我无法删除父节点。

这就是我的数组的样子:

This is how my array looks like:

这是生成的XML文件

enter image description here

正如你所看到的,我有一些"项目"在名为" item"。

的父节点内

我只想知道如何删除名为" item"的父节点。并留下如下结构:

enter image description here

我的PHP代码:

    function array_to_xml( $data, $xml_data ) {
        foreach( $data as $key => $value ) {
            if( is_numeric($key) ){
                $key = 'item';
            }
            if( is_array($value) ) {
                $subnode = $xml_data->addChild($key);
                array_to_xml($value, $subnode);
            } else {
                $xml_data->addChild("$key",htmlspecialchars("$value"));
            }
         }
    }

    $xml_data = new SimpleXMLElement('<?xml version="1.0"?><data></data>');

    array_to_xml($newArrayXml,$xml_data);

    //saving generated xml file; 
    $result = $xml_data->asXML('list.xml')

1 个答案:

答案 0 :(得分:0)

当我使用以下数组运行上述代码时,它会输出您要查找的内容:

$newArrayXml = array(
 2410687 => array('id' => 2410687),
 2440673 => array('id' => 2440673),
 2415709 => array('id' => 2415709),
 2445675 => array('id' => 2445675)
);

// var_dump($newArrayXml);exit;

function array_to_xml( $data, $xml_data ) {
 foreach( $data as $key => $value ) {
  if( is_numeric($key) ){
   $key = 'item';
  }
  if( is_array($value) ) {
   $subnode = $xml_data->addChild($key);
   array_to_xml($value, $subnode);
  } else {
   $xml_data->addChild("$key",htmlspecialchars("$value"));
  }
 }
}

$xml_data = new SimpleXMLElement('<?xml version="1.0"?><data></data>');

array_to_xml($newArrayXml,$xml_data);

//saving generated xml file;
$result = $xml_data->asXML('list.xml');

结果:

<?xml version="1.0"?>
<data>
<item><id>2410687</id></item>
<item><id>2440673</id></item>
<item><id>2415709</id></item>
<item><id>2445675</id></item>
</data>

也许问题在于您的阵列。它会在您的照片中显示array(1),这意味着您有一个额外的阵列:

$newArrayXml = array(array(
 2410687 => array('id' => 2410687),
 2440673 => array('id' => 2440673),
 2415709 => array('id' => 2415709),
 2445675 => array('id' => 2445675)
));

这会生成您不想要的输出。