我如何从此SOAPXML获取sessionid

时间:2018-12-22 14:53:13

标签: php xml soap xml-parsing

我想从这段XML代码中获取sessionid:

<soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:header>
     <soapenv:body>
       <p725:loginresponse xmlns:p725="http://www.fleetboard.com/data">
         <p725:loginresponse sessionid="0001nABbah-I8f75oDrVbHrBgOv:s96fb0a4m3"></p725:loginresponse>
        </p725:loginresponse>
     </soapenv:body>
   </soapenv:header>
 </soapenv:envelope>

我已经尝试过了,但这不起作用:

$soap=simplexml_load_string($result);
$xml_response = $soap->children('http://schemas.xmlsoap.org/soap/envelope/')->Body()->children()->p725;
echo $session_id =  (int) $xml_response->session_id;

1 个答案:

答案 0 :(得分:1)

有两种方法可以做到这一点。首先是您当前正在做的事情,但这涉及名称空间的各种更改,这意味着您需要继续获取正确的子元素和属性本身...

$soap=simplexml_load_string($result);
$xml_response = $soap->children("http://schemas.xmlsoap.org/soap/envelope/")->header->body;
$session_id = $xml_response->children("http://www.fleetboard.com/data")->loginresponse->loginresponse;
echo $session_id->attributes()->sessionid.PHP_EOL;

或者您可以使用XPath,您需要先在文档中注册名称空间,然后再将loginresponse元素与sessionid元素一起选择。这将返回一个匹配列表,因此您必须使用[0] ...

进行第一个匹配
$soap=simplexml_load_string($result);
$soap->registerXPathNamespace("p725", "http://www.fleetboard.com/data");
$session_id = $soap->xpath("//p725:loginresponse/@sessionid");
echo $session_id[0];