1

我在 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 文件的给定部分中的每一行(仅限帽子或衣服)。

4

2 回答 2

1

为什么不直接从 XML 中读取simplexml呢?

$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>
于 2013-11-16T00:02:13.313 回答
0

可以使用xml_parse_into_struct——将 XML 数据解析成数组结构

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

 <?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

于 2013-11-15T09:37:58.460 回答