Попытка запросить мыло: элементы тела, используя xpath - PullRequest
0 голосов
/ 12 марта 2012

Это мой документ SOAP XML:

HTTP/1.1 200 OK
Date: Mon, 12 Mar 2012 15:42:41 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Content-Length: 424

<?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>
      <LoginResponse xmlns="http://localhost/SPFService/">
        <LoginResult>
          <Reply xmlns="">
            <SessionID>cdfbe607-59b1-4912-ae54-2190f1b7c7dd
            </SessionID>
          </Reply>
        </LoginResult>
      </LoginResponse>
    </soap:Body>
  </soap:Envelope>

Теперь мне нужно получить доступ к значению TextNode элемента SessionID. Я создал xpath, используя:

$this->dom->loadXML($response);
$this->xpath = new \DOMXPath($this->dom);

, где $ response - строка, содержащая вышеуказанный xml.

Проблема в том, что я могу только запросить "/soap:Envelope" и "/soap:Envelope/soap:Body". Если я попытаюсь сделать запрос "/soap:Envelope/soap:Body/LoginResponse", я получу пустое значение DOMNodeList. Как мне отладить этот беспорядок?

1 Ответ

0 голосов
/ 12 марта 2012

Хорошо, я узнал, что я делаю не так.

Поскольку тег LoginResponse имеет атрибут «xmlns», мне нужно зарегистрировать значение пространства имен атрибута с префиксом (я использовал «x») на клиенте. Это делается так:

$this->xpath = new \DOMXPath($this->dom);
$this->xpath->registerNamespace('x', "http://localhost/SPFService/");

, где "http://localhost/SPFService/" - это значение атрибута" xmlns "для тега LoginResponse. Затем я могу использовать xpathQuery для поиска, т. Е." / Soap: Envelope / soap: Body / x: LoginResponse ". Обратите внимание, что я префикс "LoginResponse" с "x:".

...