我试图从soap响应中检索字符串值,但是无论尝试如何,我都会不断找回对象。我已经尝试过在StackO上找到的所有解决方案。我要么返回一个对象,要么返回一个空值。
我希望“ line”元素中包含该值。在此特定响应中,将仅返回1个“ line”元素。
$adapterResponse = simplexml_load_string($response);
$Line = $adapterResponse ->xpath('line');
示例XML:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns1:executeProcessResponse xmlns:ns1="http://bmc.com/ao/xsd/2008/09/soa">
<ns1:Output>
<ns1:Output ns1:type="xs:anyType">
<ns1:Parameter>
<ns1:Name>XML_Output</ns1:Name>
<ns1:Value ns1:type="xs:anyType">
<ns1:XmlDoc>
<XML_Output>
**<line>INVALID</line>**
</XML_Output>
</ns1:XmlDoc>
</ns1:Value>
</ns1:Parameter>
</ns1:Output>
</ns1:Output>
</ns1:executeProcessResponse>
答案 0 :(得分:2)
问题似乎是XPath表达式在错误的位置寻找<line>
元素。 line
只会在当前节点中查找元素,如果您使用//line
,则表示正在当前节点中的任何位置寻找该节点...
$Line = $adapterResponse ->xpath('//line');
所以,如果您这样做
print_r($Line);
你会得到
Array
(
[0] => SimpleXMLElement Object
(
[0] => INVALID
)
)
答案 1 :(得分:0)
您可以根据需要将SOAP响应转换为数组并访问数组元素
$response = '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns1:executeProcessResponse xmlns:ns1="http://bmc.com/ao/xsd/2008/09/soa">
<ns1:Output>
<ns1:Output ns1:type="xs:anyType">
<ns1:Parameter>
<ns1:Name>XML_Output</ns1:Name>
<ns1:Value ns1:type="xs:anyType">
<ns1:XmlDoc>
<XML_Output>
**<line>INVALID</line>**
</XML_Output>
</ns1:XmlDoc>
</ns1:Value>
</ns1:Parameter>
</ns1:Output>
</ns1:Output>
</ns1:executeProcessResponse>
</S:Body>
</S:Envelope>';
$xmlparser = xml_parser_create();
xml_parse_into_struct($xmlparser,$response,$values);
xml_parser_free($xmlparser);
echo '<pre>';
print_r($values);
结果如:-
Array
(
[0] => Array
(
[tag] => S:ENVELOPE
[type] => open
[level] => 1
[attributes] => Array
(
[XMLNS:S] => http://schemas.xmlsoap.org/soap/envelope/
)
[value] =>
)
....
....
....