2012-11-19 6 views
3

report_type에 대해이 SOAP 응답을 구문 분석하고 name 값을 얻는 방법에 대한 권장 사항이 있습니까? name에는 두 개의 인스턴스가 있습니다. 하나는 report_type이고 다른 하나는 severity입니다. 여기 PHP에서 네임 스페이스로 SOAP 응답을 구문 분석

다음은 SOAP 응답

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Body> 
     <ns1:getIRResponse xmlns:ns1="http://ws.icontent.idefense.com/V3/2"> 
     <ns1:return xsi:type="ns1:IRResponse" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
      <ns1:report_type> 
       <ns1:id>0</ns1:id> 
       <ns1:name>Original Vulnerability</ns1:name> 
      </ns1:report_type> 
      <ns1:severity> 
       <ns1:id>0</ns1:id> 
       <ns1:name>HIGH</ns1:name> 
      </ns1:severity> 
     </ns:return> 
     </ns1:getIRResponse> 
    </soapenv:Body> 
</soapenv:Envelope> 

입니다 내가 사용 PHP 코드입니다 :

<?php   
    $xml = simplexml_load_string($response);  
    $xml->registerXPathNamespace('ns1', 'http://ws.icontent.idefense.com/V3/2'); 

    foreach ($xml->xpath('//ns1:report_type/name') as $item) 
    { 
     echo 'Name: '.$item,'<br>';    
    } 
?> 

PHP 코드는 아무것도 표시하지 않습니다는. ($xml->xpath('//ns1:name') as $item)을 사용하면 두 가지 이름 (Original Vulnerability and High)이 반환됩니다.

나는 바보 같은 것을 놓친다는 것을 알고있다. 제발 도와 줄 수있어? 미리 감사드립니다.

+1

왜 처음부터 XML을 구문 분석해야하는지 질문 할 수 있습니까? 내장 SOAP 클라이언트를 사용하지 않고이 데이터를 다른 수단을 통해 소싱하고 있습니까? – Scuzzy

답변

5

첫째,이 요소를

</ns:return> 

을 수정하고 난 당신이 모두 XPath는 세그먼트

의 네임 스페이스 접두사를 복제하여 후있어 결과를 얻을 수가

</ns1:return> 

로 변경했습니다

$xml = simplexml_load_string($response);  
$xml->registerXPathNamespace('ns1','http://ws.icontent.idefense.com/V3/2'); 
foreach ($xml->xpath('//ns1:report_type/ns1:name') as $item) 
{ 
    echo 'Name: '.$item,'<br>'; 
}    

출력

Name: Original Vulnerability 
+0

일했습니다! Scuzzy 감사합니다! – user1794852

관련 문제