PHP-评估SOAP响应并从响应中检索字符串值

时间:2019-04-06 17:54:39

标签: php xml soap

我试图从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>

2 个答案:

答案 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] => 

    )
    ....
    ....
    ....