【发布时间】:2016-11-23 15:05:10
【问题描述】:
我有一个 XML,其中包含数千个节点,其中包含有关它们的属性信息。 每个节点都是这样的:
<Class Option1="fiahfs;if" Option2="fiowfr0r0" ClassID="1">
<Class Option1="ro;ewaj;frwajro" Option2="afj;wh;fha" Option3="34014upkla" ClassID="2">
....
我需要将该信息解析为 PHP 数组,其中数组名是属性名,数组中的元素数等于 ClassID 属性。 问题是某些节点具有我没有的其他节点的属性。我之前将 ->attributes() 用于一个选定元素作为
$a => $b,
$$a=array();
然后
${$a}[(integer)$products['ClassID']]=$b
其中 $products 是使用 xpath 解析 XML 得到的 simplexml 元素。这基本上给了我我需要的东西——我有几个数组,我可以解决我的请求,比如 $Option1[1] 、 $Option2[1]、Option1[2]...等。
但问题是,如果我只使用一个选定元素的属性列表创建该结构 - 会有一个元素没有的元素,但其他元素有,然后创建数组然后解析 XML - 那里' 不会是一些数组。就像我从该示例的 [0] 创建数组一样,这将给我 $Option1、$Option2,但没有 $Option3。
当我将代码重建为:
foreach ($XML->xpath('/idspace/Class') as $products){
foreach($products->attributes() as $a => $b){
if(!isset($$a) $$a=array();
${$a}[(integer)$products['ClassID']]=$b;
}}
然后我尝试 foreach($ClassID) - 我在该数组中只有一个元素。 如何在使用属性“ClassID”作为数组中的元素编号时将每个 XML 属性解析为数组?
【问题讨论】:
-
$XmlElement->children(); -
${$a}[(integer)$products['ClassID']][] = $b?