将XML转换为PHP多维数组

时间:2013-11-15 09:32:51

标签: php xml

我在XML文件中设置了以下数组:

<?xml version="1.0"?>
<hats>
    <a id="Chicago BULLS" img="bulls.jpeg" cost="$25.00" />
    <b id="Toronto RAPTORS" img="raptors.jpeg" cost="$25.00" />
    <c id="Orlando MAGIC" img="magic.jpeg" cost="$25.00" />
</hats>
<clothes>
    <a id="Chicago BULLS 23" img="bullstee.jpeg" cost="$30.00" />
    <b id="Toronto RAPTORS 23" img="torontotee.jpeg" cost="$30.00" />
    <c id="Orlando MAGIC 23" img="magictee.jpeg" cost="$30.00" />
</clothes>

我使用了一个我发现的函数将XML转换为多维数组,如下所示:

Array
(
    [hats] => Array
        (
            [a] => Array
                (
                )

            [a_attr] => Array
                (
                    [id] => Chicago BULLS
                    [img] => bulls.jpeg
                    [cost] => $25.00
                )

            [b] => Array
                (
                )

            [b_attr] => Array
                (
                    [id] => Toronto RAPTORS
                    [img] => raptors.jpeg
                    [cost] => $25.00
                )

            [c] => Array
                (
                )

            [c_attr] => Array
                (
                    [id] => Orlando MAGIC
                    [img] => magic.jpeg
                    [cost] => $25.00
                )

        )

)

正如您所看到的,它只占用了一半的XML文件,而且我也无法使用数字,所以不得不求助于字母。

最终我试图让它读取XML文件,然后仅输出标签和标签中显示的内容,最终输出更多内容。

如何将XML文件干净地解析为数组,以便我可以使用foreach循环来显示XML文件的给定部分中的每一行(仅限帽子或仅衣服)。

2 个答案:

答案 0 :(得分:0)

您可以使用xml_parse_into_struct - 将XML数据解析为数组结构

语法: int xml_parse_into_struct(resource $ parser,string $ data,array&amp; $ values [,array&amp; $ index]) 此函数将XML字符串解析为2个并行数组结构,其中一个(索引)包含指向values数组中相应值的位置的指针。最后两个参数必须通过引用传递。

 <?php
    $simple = '<hats>
                <a id="Chicago BULLS" img="bulls.jpeg" cost="$25.00" />
                <b id="Toronto RAPTORS" img="raptors.jpeg" cost="$25.00" />
                <c id="Orlando MAGIC" img="magic.jpeg" cost="$25.00" />
            </hats>
            <clothes>
                <a id="Chicago BULLS 23" img="bullstee.jpeg" cost="$30.00" />
                <b id="Toronto RAPTORS 23" img="torontotee.jpeg" cost="$30.00" />
                <c id="Orlando MAGIC 23" img="magictee.jpeg" cost="$30.00" />
            </clothes>';
    $p = xml_parser_create();
    xml_parse_into_struct($p, $simple, $vals, $index);
    xml_parser_free($p);
    echo "Index array\n";
    print_r($index);
    echo "\nVals array\n";
    print_r($vals);
  ?>

参考:http://us1.php.net/xml_parse_into_struct

答案 1 :(得分:0)

为什么不直接使用simplexml来读取XML?

$xml = simplexml_load_string($x); // assume XML in $x

foreach ($xml->children() as $name => $value) {
    echo "$name: <br />"; // name of the node, e.g. '<hats>'
    foreach ($value->children() as $item) {
        echo "$item[id], $item[img], $item[cost]<br />";
    }
}

看到这个有效:http://3v4l.org/dpjsg

如果您是此XML的创建者,请更容易解析如下:

<items>
    <group name="hats">
        <item id="1" name="Chicago BULLS" img="bulls.jpeg" cost="25.00" />
    </group>
    <group name="clothes">
        ...
    </group>
</items>