2017-02-22 7 views
1

tem:sessionId과 같은 매개 변수가있는 xml wsdl 요청을 생성하고 싶습니다. 그러나 PHP 코드는 x:sessionId입니다. 내가 필요 x: 결과SimpleXML Document PHP를 사용하여 tem : tagName을 가진 자식 추가

tem:로 변환하는 방법을 알고하지 않습니다

<?xml version="1.0"?> 
<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"> 
    <x:Header/> 
    <x:Body> 
     <tem:GetServicesByProvider> 
      <tem:sessionId>890925</tem:sessionId> 
      <tem:ProviderId>29</tem:ProviderId> 
      <tem:mac/> 
     </tem:GetServicesByProvider> 
    </x:Body> 
</x:Envelope> 

이 내 PHP 코드

private function createXMLRequest($function, $params) 
{ 
    $xml = new \SimpleXMLElement('<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"><x:Header/></x:Envelope>'); 
    $body = $xml->addChild('Body'); 
    $f = $body->addChild($function, ''); 
    foreach ($params as $param) { 
     $f->addChild($param['tag'], $param['text']); 
    } 

    return $xml; 
} 

이지만이 생성

<?xml version="1.0"?> 
<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"> 
<x:Header/> 
<x:Body> 
    <x:GetServicesByProvider> 
     <x:sessionId>890925</x:sessionId> 
     <x:ProviderId>29</x:ProviderId> 
     <x:mac/> 
    </x:GetServicesByProvider> 
</x:Body> 
</x:Envelope> 

답변

0

SimpleXML addChild 방법 (documentation here)은 thir 당신이 URI가 겨냥한를 모두 로컬 접두사 ​​ 네임 스페이스를 알고 있기 때문에 당신이하는 네임 스페이스 요소가에 있어야합니다.

이 작동하는 방식을 지정할 수 있습니다 d 매개 변수, $namespace은 조금 서투른입니다 .

귀하의 경우 <tem:sessionID>를 작성하려면 일정 일종의 네임 스페이스 URI를 넣어

$f->addChild('tem:sessionID', $value, 'http://tempuri.org/'); 

내 추천되어 사용하고 추가에있는 각 요소에 'tem:' 앞에 추가합니다 :

define('XMLNS_SOAP', 'http://schemas.xmlsoap.org/soap/envelope/'); 
define('XMLNS_TEMP', 'http://tempuri.org/'); 

$xml = new \SimpleXMLElement('<x:Envelope xmlns:x="' . XMLNS_SOAP . '" xmlns:tem="' . XMLNS_TEMP . '"><x:Header/></x:Envelope>'); 

$body = $xml->addChild('Body'); 
$f = $body->addChild($function, ''); 
foreach ($params as $param) { 
    $f->addChild('tem:' . $param['tag'], $param['text'], XMLNS_TEMP); 
} 
+0

'tem :'을'addChild' 메소드에 추가하면'tem :'이 자동으로 제거됩니다. –

+0

@ 543310 올바른 네임 스페이스 URL을 세 번째 매개 변수로 포함 하시겠습니까? 나는이 코드를 게시하기 전에이 코드를 테스트했고, 원하는 결과물을 정확히 만들어 냈다. 직접 체험 해보십시오 : https://3v4l.org/majj9 – IMSoP