Как распечатать массив в Xml с помощью PHP

#php #arrays #xml

#php #массивы #xml

Вопрос:

Посмотрите, что он вводит числа и единицу вместо «codDedido». Мне нужно, чтобы он был в формате xml .. но я не знаю, где я ошибаюсь. Я заполнил его следующим образом:

 $listaDados[pedido][listItem][0][codItem]=123;
$listaDados[pedido][listItem][1][codItem]=456;
 

Вот моя функция, :

 function array_to_xml2($array, amp;$xml_user_info) {
    foreach($array as $key => $value) {
        if(is_array($value)) {
            if(!is_numeric($key)){
                $subnode = $xml_user_info->addChild("$key");
                self::array_to_xml2($value, $subnode); 
            }else{
                $subnode = $xml_user_info->addChild("$key");
                self::array_to_xml2($value, $subnode); 
            }
        }else{
            $xml_user_info->addChild("$key",htmlspecialchars("$value"));
        }
    }
 

здесь я называю:

 foreach ($listaDados['pedido']['listaPedItem'] as $listaD) {
    $teste['listaPedItem'] = $listaD; 
    self::array_to_xml2($teste,$xml_user_info);
    var_dump($listaD);
}
 

Итак, мне нужно, чтобы это:

 <pedido>
    <listPedItem>
        <codPedido>123</codPedido>
    </listPedItem>
    <listPedItem>
        <codPedido>456</codPedido>
    </listPedItem>
</pedido>
 

Но я не знаю, что он возвращает :

 <pedido>
   <listPedItem>
    <0>
        <codPedido>
    </0>
    <1>
        <codPedido>
    </1>
  </listPedItem>
</pedido>
 

Комментарии:

1.что такое $xml_user_info ? Почему вы передаете объект в качестве ссылки? Можете ли вы создать отдельный пример (без $this self и т. Д.)

2. привет @AterLux, спасибо за ответ.. итак, я делаю: $xml_user_info = new SimpleXMLElement("<?xml version="1.0"?><pedido></pedido>"); и self::array_to_xml2($listaDados,$xml_user_info);

Ответ №1:

возможно, попробуйте эту функцию с официальной страницы PHP

 <?php 
function array2XML($arr,$root) { 
$xml = new SimpleXMLElement("<?xml version="1.0" encoding="utf-8" ?><{$root}></{$root}>"); 
$f = create_function('$f,$c,$a',' 
        foreach($a as $v) { 
            if(isset($v["@text"])) { 
                $ch = $c->addChild($v["@tag"],$v["@text"]); 
            } else { 
                $ch = $c->addChild($v["@tag"]); 
                if(isset($v["@items"])) { 
                    $f($f,$ch,$v["@items"]); 
                } 
            } 
            if(isset($v["@attr"])) { 
                foreach($v["@attr"] as $attr => $val) { 
                    $ch->addAttribute($attr,$val); 
                } 
            } 
        }'); 
$f($f,$xml,$arr); 
return $xml->asXML(); 
} 
?>
 

Источник