2012-09-03 130 views
0

這裏是一個API我的XML響應節點:掙扎讀取用SimpleXML

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
    <GetCertificateResponse xmlns="http://url.com"> 
     <GetCertificateResult> 
     <ReturnValue xmlns=""> 
      <Status>Success</Status> 
      <Message/> 
      <CertificateNumber/> 
      <URL/> 
     </ReturnValue> 
     </GetCertificateResult> 
    </GetCertificateResponse> 
    </soap:Body> 
</soap:Envelope> 

我怎樣才能reaq狀態節點?我試過這麼多的連擊:

  $getCertificateXMLResponse = simplexml_load_string($getCertificateXMLResponse); 

     echo $getCertificateXMLResponse->GetCertificateResponse->GetCertificateResult->ReturnValue->Status; 
+0

使用SOAP PHP extention處理SOAP請求。 –

回答

1

您還可以使用XPath做

$xml = simplexml_load_string($soap, NULL, NULL, "http://schemas.xmlsoap.org/soap/envelope/"); 
$xml->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/'); 

$result = $xml->xpath('//Status'); 
echo $result[0]; 
+0

你能告訴我爲什麼我的方法不工作嗎?是因爲它是SOAP,所以它比閱讀正常的XML響應更重要嗎?謝謝! –

+0

這是因爲你沒有在樹的頭部開始你的方法。 在你的例子中,你應該使用類似於: $ getCertificateXMLResponse-> children(「soap」,true) - > Body-> children() - > GetCertificateResponse-> GetCertificateResult-> ReturnValue->狀態 –

+0

原始解決方案僅適用於這對我來說足夠了!歡呼輸入 –

0

是......醜..但工程

$xml = new SimpleXMLElement(file_get_contents('a.xml'),0,false,''); 
$namespaces = $xml->getDocNamespaces(true); 
$xml->registerXPathNamespace('empty', $namespaces['']); 
$xml->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/'); 
$status = array_shift($xml->xpath("soap:Body/empty:GetCertificateResponse/empty:GetCertificateResult/ReturnValue/Status")); 
echo $status->asXML(); 

我很好奇,看看更優雅的解決方案。

確實看看像nusoap這樣的東西。