0

嗨,我想知道是否有人知道可以将任何 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 的某些部分可能比另一部分有更多的子元素,它应该全部抓取它们,如果有多个具有相同名称的属性将是一个自己的数组,每个数组都是其中的一个数组

希望这是有道理的,任何人都可以帮忙。我主要尝试使用 simplexml,但可以使用其他任何东西

4

1 回答 1

2

对于像您示例中的文档这样的简单文档,总是有这个(肮脏的)技巧:

$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
        )
    )
)
于 2013-03-31T13:34:54.970 回答