2012-03-12 6 views
0

を使用してボディ要素これは私のSOAP XMLドキュメントです:は石鹸を照会しようとすると:XPathの

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> 

は今、私はセッションID要素のTextNode値にアクセスする必要があります。

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

ここで、$ responseは上記のxmlを含む文字列です。

問題は、私が唯一"/soap:Envelope""/soap:Envelope/soap:Body"を照会することができます。私が"/soap:Envelope/soap:Body/LoginResponse"を照会しようとすると、空のDOMNodeListが得られます。この混乱をどのようにデバッグするのですか?

答えて

0

さて、私は私が間違って何をやっていたが分かりました。

タグLoginResponseは「のxmlns」属性を持っているので、私は、クライアント上で(私は「x」を使用)の接頭辞を持つ属性の名前空間の値を登録する必要があります。これは、そのように行われます。

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

、 "のhttp:// localhost /をSPFService /" はLoginResponseタグの属性 "のxmlns" の値です。次に、xpathQueryを使って "/ soap:Envelope/soap:Body/x:LoginResponse"を見つけることができます。 「LoginResponse」の前に「x:」と付いていることに注意してください。

関連する問題