>source

다음 형식으로 XML을 보내야합니다.

<soapenv:Body><loc:amount>  <loc:user>user_name</loc:user>  <loc:charge>    <description>description_text</description>  </loc:charge></loc:amount>

soapVar로 XML 본문을 생성했지만 "ns1"태그를 변경할 수 없습니다. 출처:

$var= '<loc:amount> <loc:user>user_name</loc:user> <loc:charge> <description>description_text</description> </loc:charge> </loc:amount>';
$params[0]= new SoapVar($var,XSD_ANYXML,'amount','http://mydomain.cm');

헤더 결과는 다음과 같습니다.

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://mydomain.cm" xmlns:ns2="http://header_domain.cm">

이 결과가 필요합니다.

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:loc="http://mydomain.cm" xmlns:ns2="http://header_domain.cm">

'ns1'태그를 'loc'로 변경할 수 있습니까 ??

감사합니다

  • 답변 # 1

    네임 스페이스 접두사 이름은 중요하지 않습니다. 의미를 도출하는 것은 네임 스페이스 값에 대한 바인딩을 통해서만 가능합니다. 어떤 XML 프로세서도 특정 네임 스페이스 접두사 이름을 신경 쓰지 않습니다. 당신도 마찬가지입니다.

    좋아요,하지만 API code이고 XML 결과가 예제와 동일해야합니다. 응답이 잘못된 경우 서버 오류입니다.

    xandra2021-03-13 09:25:22

    귀하의 의견은 귀하가 내 대답을 이해하지 못했음을 나타냅니다. 부적합한 XML 프로세서 (가능하지만 가능성은 낮음)를 다루거나 수신 한 오류를 잘못 해석하고 있습니다.

    kjhughes2021-03-13 09:25:22

    @xandra : 어떤 이유로 든 이것이 중요하다면 XML 문자열의 ns 이름을 SoapVar가 생성하는 이름과 일치하도록 변경할 수 없습니까? (예 : ...)

    Kurt Larsen2021-03-13 09:25:22

    @kjhughes 정의 된 네임 스페이스 이름이 필요한 "하드 코딩 된"서버에 연결하는 경우 도움이되지 않습니다.

    Alexander Opitz2021-03-14 03:10:58

    @AlexanderOpitz : 그런 서비스는 망가졌습니다. 규칙을 따르지 않습니다. 즉, 클라이언트에게 새로운 규칙을 제공해야하며 표준 규칙을 따르는 도구를 사용할 수 없습니다. 나도 여기에있는 대부분도 표준을 따르는 라이브러리 나 전체 예제 code 및 Q /A도 특이하거나 정의되지 않은 규칙을 사용하는 타사 블랙 박스와의 OP 디버그 상호 작용을 도와주지 않습니다.

    kjhughes2021-03-14 03:10:58
  • 답변 # 2

    기본 네임 스페이스 접두사로 "u"를 사용하는 UPnP 장치에 이러한 문제가 있으며 ns1에서 변경해야합니다. 더 나은 솔루션을 찾지 못 했으므로 여기에 솔루션을 게시하겠습니다.

    class UpnpSoapClient extends SoapClient {
    public function __doRequest($request, $location, $action, $version, $oneWay= 0)
    {
        //Some fucking UPnP Devices need the fucking u as namespace-prefix ... WTF?
        if (preg_match('/xmlns:ns1=/', $request)) {
            $request= preg_replace('/xmlns:ns1=/', 'xmlns:u=', $request, 1);
            $request= preg_replace('/ns1:/', 'u:', $request);
        }
        return parent::__doRequest($request, $location, $action, $version);
    }
    

    }

    "u"를 기본 네임 스페이스로 사용합니다. 아니요, u는 기본 네임 스페이스가 아닙니다. 네임 스페이스 접두사입니다. 4 년 전에 대답했듯이 네임 스페이스 접두사는 바인딩 된 네임 스페이스 값을 제외하고는 중요하지 않습니다. 사용중인 서비스가 특정 네임 스페이스 접두사를 요구할 정도로 손상 될 수있는 것보다 XML 네임 스페이스를 오해 할 가능성이 더 큽니다. 그리고 만약 당신이 그러한 깨진 서비스를 발견했다면, 그들의 해킹 위에 이와 같은 해킹을 추가하는 것은 문제를 전파하고 미래의 실패를 요구하는 것입니다.

    kjhughes2021-03-14 03:10:58

    좋습니다. 기본 네임 스페이스가 올바르지 않습니다 (로 정의되었으므로 "기본 UPnP 네임 스페이스 접두사"로 다시 말하겠습니다).

    Alexander Opitz2021-03-14 03:10:58
  • 이전 hover : 숨겨진 요소를 추가했지만 이제 호버 효과가 더 이상 작동하지 않습니다.
  • 다음 Bash 히스토리에 명령이 표시되지 않도록하려면 어떻게해야합니까?