php Динмический формат XML в массив php

0

Привет, мне было интересно, знает ли кто-нибудь script или функцию, которая может отформатировать любой XML файл в массив в определенном формате, например, иметь xml-то вроде этого (но гораздо дольше)

<data>
    <width>3.5</width>
    <height>2</height>
    <edge>.125</edge>
    <safe>.125</safe>
</data>

<fold>
    <show_lines></show_lines>
    <type>online</type>
</fold>

<preview>
    <name>testfile</name>
    <location>testurl.com</location>
</preview>

<preview>
    <name>myfile</name>
    <location>someurl.com</location>
    <special>frontandback</special>
</preview>

Id в основном хочет пропустить каждый атрибут, проверьте, есть ли внутри него и т.д. и т.д. и так далее, и в основном создайте массив, чтобы он выглядел так.

$array = [data] (
    width=>3.5
    height=>2
    edge=>.125
    safe=>.125
)

[fold] (
    type=>online
)

[preview] (
    [0]=>(
        name=>testfile
        location=>testurl.com
    )
    [1]=>(
         name=>myfile
         location=>someurl.com
         special=>frontandback
    )
)

и т.д., поэтому в основном он будет захватывать только те элементы, которые имеют значения, и пропускать те, которые не имеют, а некоторые части xml могут иметь больше детей, чем другая часть, и они должны захватывать их все, и если есть несколько атрибутов с одно и то же имя, которое будет представлять собой массив, каждый из которых является массивом внутри него

Надеюсь, что имеет смысл, кто-нибудь может помочь. Im в основном пытается использовать simplexml, но может использовать anythign else

  • 0
    Это может вам помочь: outlandishideas.co.uk/blog/2012/08/xml-to-json
  • 0
    Да, это возможно. Это должно быть запрограммировано. Это было запрограммировано ранее (используйте поиск). Что вы пробовали? Где вы попали в контрольно-пропускной пункт?
Теги:
xml-parsing
xml-serialization
simplexml

1 ответ

1

Для простых документов, подобных тому, что в вашем примере, всегда есть этот (грязный) трюк:

$arr = json_decode(json_encode(simplexml_load_string($xml)), 1);

рабочий пример

выход:

Array (
    [data] => Array (
        [width]  => 3.5
        [height] => 2
        [edge]   => .125
        [safe]   => .125
    )
    [fold] => Array (
        [show_lines] => Array ()
        [type]       => online
    )
    [preview] => Array (
        [0] => Array (
                [name]     => testfile
                [location] => testurl.com
        )
        [1] => Array (
                [name]     => myfile
                [location] => someurl.com
                [special]  => frontandback
        )
    )
)
  • 0
    может также добавить - пустые строки и массивы будут удовлетворять empty() - если вам действительно нужно удалить все узлы без значений, через которые вы могли бы пробежать, и unset() их впоследствии.
  • 0
    Единственная проблема с этим методом состоит в том, что я получаю два объекта предварительного просмотра вместо одного с массивом обоих
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню