Próbuje powrócić XML z laravel. źle parse xml

głosy
0

Cześć Im próbuje stworzyć plik xml z laravel 5.2.

Moja funkcja Co ja wykomentowane próbowałem, złego xml parse.

    public function createXML() {
        $maps = Maps::get()->toArray();

//        function array_to_xml(array $arr, SimpleXMLElement $xml)
//        {
//            foreach ($arr as $k => $v) {
//                is_array($v)
//                    ? array_to_xml($v, $xml->addChild($k))
//                    : $xml->addChild($k, $v);
//            }
//            return $xml;
//        }
        function to_xml(SimpleXMLElement $object, array $data)
        {
            foreach ($data as $key => $value) {
                if (is_array($value)) {
                    $new_object = $object->addChild($key);
                    to_xml($new_object, $value);
                } else {
                    $object->addChild($key, $value);
                }
            }
        }

//        $xmloutput = to_xml($maps, new SimpleXMLElement('<root/>'))->asXML();
        $xml = new SimpleXMLElement('<rootTag/>');
        to_xml($xml, $maps);

        return Response::make($xml->asXML())->header('Content-Type', 'text/xml');

wprowadzić

moja tablica wyjściowa:

array:2 [▼
  0 => array:5 [▼
    id => 1
    name => Leeuwarden
    address => Leeuwarden
    lat => 53.20132
    lng => 5.80005
  ]
  1 => array:5 [▼
    id => 2
    name => Assen
    address => Assen
    lat => 52.99275
    lng => 6.56423
  ]
]

Wszelkie sugestie na temat tego, co robię źle?

Próbuję zrobić mapę Google Maps API ze wskaźnikami z bazy danych.

Utwórz 23/05/2016 o 11:51
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
1

1-te opcja: uzyskać właściwą strukturę bezpośrednio na mapach i wymienić tablice.

2-ty opcja: jeśli can'y zmienić $mapstablicę otrzymali, to można zmodyfikować poziom głowy, dodając do niego czek:

$maps = [
    0 => [
        "id" => 1,
        "name" => "Leeuwarden",
        "address" => "Leeuwarden",
        "lat" => 53.20132,
        "lng" => 5.80005,
    ],
    1 => [
        "id" => 2,
        "name" => "Assen",
        "address" => "Assen",
        "lat" => 52.99275,
        "lng" => 6.56423,
    ]
];

function to_xml(\SimpleXMLElement $object, array $data, $level = 0)
{
    foreach ($data as $key => $value) {
        if (is_array($value)) {
            $new_object = $object->addChild(($level == 0) ? 'marker' : $key);
            to_xml($new_object, $value, $level + 1);
        } else {
            $object->addChild($key, $value);
        }
    }
}

$xml = new \SimpleXMLElement('<rootTag/>');
to_xml($xml, $maps);

header('Content-type: text/xml');
echo $xml->asXML();

Edit: I sprawdzone docs , wydaje się, że poziom 1 musi być nazwane marker.

Odpowiedział 23/05/2016 o 12:24
źródło użytkownik

głosy
0

Jest prostszy sposób z tym pakietem .

$maps = Maps::get()->toArray();

$httpCode = 200;
$headers = [];
$rootXmlTag = 'rootTag';

return response()->xml($maps, 200, [], 'rootTag);
Odpowiedział 23/10/2018 o 20:21
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more