使用属性访问PHP SoapClient响应元素中的值

时间:2019-11-22 22:18:34

标签: php xml soap

我在处理PHP SoapClient响应时遇到问题...

我知道我可以使用对象符号访问响应XML元素:

$client = new SoapClient($wsdl,$options);
$data=$client->Method(array('Param'=>"Value"));
$tmp = $data->Results->Asset->Attributes>Attribute;
var_dump($tmp);

问题是当我尝试到达具有某些属性的元素时... 这是XML资源库的一部分:

<Results>
 <Asset>
  <Attributes>
   <Attribute Name="ID">0</Attribute>
   <Attribute Name="FirstName">John</Attribute>
   <Attribute Name="Size">Large</Attribute>
  </Attributes>
 </Asset>
 <Asset>
  <Attributes>
   <Attribute Name="ID">1</Attribute>
   <Attribute Name="FirstName">Bob</Attribute>
   <Attribute Name="Size">Medium</Attribute>
  </Attributes>
 </Asset>
 <Asset>
  <Attributes>
   <Attribute Name="ID">2</Attribute>
   <Attribute Name="FirstName">Frank</Attribute>
   <Attribute Name="Size">Small</Attribute>
  </Attributes>
 </Asset>
</Results>

如何使用对象符号从具有属性“ Size”的元素“ Attribute”中获取值? 在print_r中,我得到了一个带有stdClass的数组(它只是其中的一部分)

[0] => stdClass Object
    (
        [Attributes] => stdClass Object
        (
            [Attribute] => Array
            (
                [0] => stdClass Object
                    (
                        [_] => 0
                        [Name] => ID
                    )

                [1] => stdClass Object
                    (
                        [_] => John
                        [Name] => FirstName
                    )

                [2] => stdClass Object
                    (
                        [_] => Large
                        [Name] => Size
                    )
            )
        )
    )
[1] => stdClass Object
    (
        [Attributes] => stdClass Object
        (
            [Attribute] => Array
            (
                [0] => stdClass Object
                    (
                        [_] => 1
                        [Name] => ID
                    )

                [1] => stdClass Object
                    (
                        [_] => Bob
                        [Name] => FirstName
                    )

                [2] => stdClass Object
                    (
                        [_] => Medium
                        [Name] => Size
                    )
            )
        )
    )
[2] => stdClass Object
    (
        [Attributes] => stdClass Object
        (
            [Attribute] => Array
            (
                [0] => stdClass Object
                    (
                        [_] => 2
                        [Name] => ID
                    )

                [1] => stdClass Object
                    (
                        [_] => Frank
                        [Name] => FirstName
                    )

                [2] => stdClass Object
                    (
                        [_] => Small
                        [Name] => Size
                    )
            )
        )
    )

我知道我可以使用

$client->__getLastResponse()

并使用SimpleXMLElement进行解析,但这对我来说似乎不是最佳选择...

1 个答案:

答案 0 :(得分:0)

您应该可以在$data->Results->Asset->Attributes->Attribute[0]->_上访问它。

如果要搜索属性为“ size”的值,则可能需要循环。这么小的样本很难说出您的数据是什么样子,但是我不相信像array_column()这样的简洁方法可以在这种结构下工作。

<?php
foreach ($data->Results->Asset as $Asset) {
    foreach ($Asset->Attributes->Attribute as $Attribute) {
        if ($Attribute->Name === "Size") {
            echo $Attribute->_;
        }
    }
}