我在处理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
进行解析,但这对我来说似乎不是最佳选择...
答案 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->_;
}
}
}