有没有人知道我是否可以强制SimpleXMLElement变量始终是一个数组?
<result>
<item>
<id>1</id>
<name>name 1</name>
</item>
<item>
<id>2</id>
<name>name 2</name>
</item>
</result>
通过simplexml_load_string()解析上述XML时,我得到以下对象
SimpleXMLElement Object
(
[item] => Array
(
[0] => SimpleXMLElement Object
(
[id] => 1
[name] => name 1
)
[1] => SimpleXMLElement Object
(
[id] => 2
[name] => name 2
)
)
)
这很棒,因为我可以遍历“item”并获取单个对象。但是当item是单个条目时,如下所示,我得到一个不同的对象结构,这会破坏我的循环,因为我开始循环遍历“id”和“name”而不是对象。
<result>
<item>
<id>1</id>
<name>name 1</name>
</item>
</result>
SimpleXMLElement Object
(
[item] => SimpleXMLElement Object
(
[id] => 1
[name] => name 1
)
)
是否有强制“item”为simplexml_load_string()的数组或重构XML?
答案 0 :(得分:2)
您不需要将其作为数组,只需进行简单的检查即可。像
if(is_array($xml->result->item))
{
//loop here
}
else
{
//only one object
}
此外,只要有一个元素或有多个元素,单个foreach将完成工作。例如
<?php
$string="
<result>
<item>
<id>1</id>
<name>name 1</name>
</item>
</result>";
$xml = simplexml_load_string($string);
//print_r($xml);
foreach($xml->item as $item)
{
echo $item->id."\n";
}
?>
对于多个项目也很好。见小提琴
<强> Fiddle 强>