PHP SimpleXMLElement转换bug?

时间:2018-03-22 09:59:47

标签: php xml simplexml

我正在使用SimpleXMLElement来帮助我从字符串创建对象, 但面临一些问题:

如果xml字符串只有一个信息标记,它会将元素所属信息转换为object

<?xml version='1.0' encoding='utf-8'?>
<string>
    <TotalRecords>1</TotalRecords>
    <data>
        <info>
            <name>huge</name>
            <age>27</age>
        </info>
    </data>
</string>

如果xml字符串有多个信息标记,将元素belogs信息转换为array

<?xml version='1.0' encoding='utf-8'?>
<string>
    <TotalRecords>1</TotalRecords>
    <data>
        <info>
            <name>huge</name>
            <age>27</age>
        </info>
        <info>
            <name>alex</name>
            <age>27</age>
        </info>
    </data>
</string>

这可以解决所有情况array吗? 还是有另一种php方法可以更完美地转换?

enter image description here

1 个答案:

答案 0 :(得分:1)

SimpleXML永远不会将任何东西转换为数组,你刚刚被调试函数的输出误导了。

事实上,SimpleXML在这种情况下非常有用,并允许您选择是否:

  • 访问第一个<info>元素并忽略其他任何元素(例如$name = (string)$xml->data->info->name;
  • 通过数字索引(例如$first_name = (string)$xml->data->info[0]->name; $second_name = (string)$xml->data->info[1]->name;
  • 访问具有相同名称的特定元素
  • 循环使用相同名称的所有元素,即使只有一个元素(例如foreach ( $xml->data->info as $info ) { $this_name = (string)$info->name; }
  • 循环遍历特定级别的所有元素,无论名称如何(例如$info = $xml->data->info[0]; foreach ( $info->children() as $tag_name => $element ) { echo "$tag_name = ", (string)$element; }