Php 关联数组的嵌套SimpleXML属性

Php 关联数组的嵌套SimpleXML属性,php,arrays,xml,simplexml,xml-attribute,Php,Arrays,Xml,Simplexml,Xml Attribute,我正在将一个支付网关集成到一个网站中,他们的API返回一个xml对象,其中嵌套了我需要的值 SimpleXMLElement Object ( [form] => SimpleXMLElement Object ( [input] => Array ( [0] => SimpleXMLElement Object

我正在将一个支付网关集成到一个网站中,他们的API返回一个xml对象,其中嵌套了我需要的值

SimpleXMLElement Object
(

    [form] => SimpleXMLElement Object
        (
            [input] => Array
                (
                    [0] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [type] => hidden
                                    [name] => SessionStored
                                    [value] => True
                                )

                        )

                    [1] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [type] => hidden
                                    [name] => SessionStoredError
                                    [value] => 
                                )

                        )

                    [2] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [type] => hidden
                                    [name] => SST
                                    [value] => e19e8abe-a2d6-4ce7
                                )

                        )

                )

        )

)
使用php如何将嵌套属性放入如下格式的关联数组中

$array['SessionStored'] = 'True'
$array['SessionStoredError'] = ''
$array['SST'] = 'e19e8abe-a2d6-4ce7'
这有点混乱,但在网上阅读了其他文章后,我将以下内容放在一起,其中抛出了一个“致命错误:调用成员函数attributes()”

$xmlData=simplexml\u load\u字符串($result);
$aXml=json_解码(json_编码($xmlData),1);
$testArray=$aXml['form']['input'];
对于($i=0;$iattributes()作为$a=>b){
回显$a,“=”,$b,“\”\n”;
}
}

不要尝试转换XML

将XML转换为JSON意味着丢失信息。泛型转换不使用语义结构。没有“嵌套属性”,只有一些带有属性节点的输入元素节点

读取它并从数据生成数组

$result = [];
$element = new SimpleXMLElement($xml);
foreach ($element->form->input as $input) {
  $result[(string)$input['name']] = (string)$input['value'];
}

var_dump($result);
输出:

array(3) {
  ["SessionStored"]=>
  string(4) "True"
  ["SessionStoredError"]=>
  string(0) ""
  ["SST"]=>
  string(18) "e19e8abe-a2d6-4ce7"
}
DOM也很容易做到这一点:

$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);
$result = [];
foreach ($xpath->evaluate('//form/input') as $input) {
  $result[$input->getAttribute('name')] = $input->getAttribute('value');
}

var_dump($result);

@JimGarrison我添加了我当前的代码,这正是我想要的。今天我学到了一些新东西。谢谢
$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);
$result = [];
foreach ($xpath->evaluate('//form/input') as $input) {
  $result[$input->getAttribute('name')] = $input->getAttribute('value');
}

var_dump($result);