首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在PHP中将XML转换为数组?

如何在PHP中将XML转换为数组?
EN

Stack Overflow用户
提问于 2011-07-05 14:45:46
回答 10查看 459.6K关注 0票数 198

我想把下面的XML转换成PHP数组。对如何做到这一点有什么建议吗?

代码语言:javascript
复制
<aaaa Version="1.0">
   <bbb>
     <cccc>
       <dddd Id="id:pass" />
       <eeee name="hearaman" age="24" />
     </cccc>
   </bbb>
</aaaa>
EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2011-07-05 14:59:30

另一个选择是SimpleXML扩展(我相信它是大多数php安装的标准配置)。

http://php.net/manual/en/book.simplexml.php

对于您的示例,语法如下所示

代码语言:javascript
复制
$xml = new SimpleXMLElement($xmlString);
echo $xml->bbb->cccc->dddd['Id'];
echo $xml->bbb->cccc->eeee['name'];
// or...........
foreach ($xml->bbb->cccc as $element) {
  foreach($element as $key => $val) {
   echo "{$key}: {$val}";
  }
}
票数 141
EN

Stack Overflow用户

发布于 2013-12-07 03:10:26

简单!

代码语言:javascript
复制
$xml = simplexml_load_string($xmlstring, "SimpleXMLElement", LIBXML_NOCDATA);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
票数 486
EN

Stack Overflow用户

发布于 2013-04-06 17:36:44

将XML字符串($buffer)转换为简化的数组,忽略属性并对同名的子元素进行分组:

代码语言:javascript
复制
function XML2Array(SimpleXMLElement $parent)
{
    $array = array();

    foreach ($parent as $name => $element) {
        ($node = & $array[$name])
            && (1 === count($node) ? $node = array($node) : 1)
            && $node = & $node[];

        $node = $element->count() ? XML2Array($element) : trim($element);
    }

    return $array;
}

$xml   = simplexml_load_string($buffer);
$array = XML2Array($xml);
$array = array($xml->getName() => $array);

结果:

代码语言:javascript
复制
Array
(
    [aaaa] => Array
        (
            [bbb] => Array
                (
                    [cccc] => Array
                        (
                            [dddd] => 
                            [eeee] => 
                        )

                )

        )

)

如果您还想拥有这些属性,可以通过SimpleXMLElement的JSON编码/解码获得它们。这通常是最简单、最快、最脏的解决方案:

代码语言:javascript
复制
$xml   = simplexml_load_string($buffer);
$array = json_decode(json_encode((array) $xml), true);
$array = array($xml->getName() => $array);

结果:

代码语言:javascript
复制
Array
(
    [aaaa] => Array
        (
            [@attributes] => Array
                (
                    [Version] => 1.0
                )

            [bbb] => Array
                (
                    [cccc] => Array
                        (
                            [dddd] => Array
                                (
                                    [@attributes] => Array
                                        (
                                            [Id] => id:pass
                                        )

                                )

                            [eeee] => Array
                                (
                                    [@attributes] => Array
                                        (
                                            [name] => hearaman
                                            [age] => 24
                                        )

                                )

                        )

                )

        )

)

请注意,所有这些方法只在XML文档的名称空间中有效。

票数 49
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6578832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档