首页 > 解决方案 > PHP - 评估 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>

标签: phpxmlsoap

解决方案


问题看起来像是 XPath 表达式在错误的位置寻找<line>元素。 line只会在当前节点中查找元素,如果改为使用//line,则表示在当前节点中的任何位置查找节点...

$Line = $adapterResponse ->xpath('//line');

所以如果你这样做

print_r($Line);

你会得到

Array
(
    [0] => SimpleXMLElement Object
        (
            [0] => INVALID
        )

)

推荐阅读