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