2012-05-08 7 views
0

私はSoapUIとSoapUI Proについて初めてです。私は最近、資産移転の問題を抱えていました。私は解決策を見つけようとしていませんでした。私はwebservicex.netから「国コード」を練習していた、と私は「」はgetCountry」テスト要求を実行したときに、私は応答として国のリストを取得します石鹸レスポンスからノードを取得する方法は?

<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> 
     <GetCountriesResponse xmlns="http://www.webserviceX.NET"> 
     <GetCountriesResult><![CDATA[<NewDataSet> 
    <Table> 
    <Name>Afghanistan, Islamic State of</Name> 
    </Table> 
    <Table> 
    <Name>Albania</Name> 
    </Table> 
    <Table> 
    <Name>Algeria</Name> 
    </Table> 
    ..... 
</NewDataSet>]]></GetCountriesResult> 
     </GetCountriesResponse> 
    </soap:Body> 
</soap:Envelope> 

すべて良いです例えば、アルジェリアのデータセットから国のうちの1つだけを検索したいという要望が出てくるまで、それは国名をリクエストとして国名を使用する次のテストステップに移したいからです。応答からノードを選択するには、取得したXPathがこれらのノードの1つではなく応答全体を指していることに気付いた。

declare namespace ns1='http://www.webserviceX.NET'; 
//ns1:GetCountriesResponse[1]/ns1:GetCountriesResult[1] 

私はおそらくここであなたの中には非常に単純な質問だと思うが、私のXPathのスキルは、自分でそれを解決する能力を制限するものである。誰かが助けることができれば非常に感謝します。

答えて

0

完全な応答を得ているXPath式が続いています。

declare namespace ns1='http://www.webserviceX.NET'; 
//ns1:GetCountriesResponse[1]/ns1:GetCountriesResult[1] 

GetCountriesResultはCDATA値を保持し、XMLパーサによって解析されないためです。したがって、結果を取得して一時的なストリームに入れ、解析して値を取得する必要があります。

+0

こんにちはネオを自分の名前空間の名前を入れますか? –

0

あなたはその後、CDATAからノードを取得する方法上の任意の提案を持っているか、ここ

$sxe = new SimpleXMLElement($response); 
      $sxe->registerXPathNamespace('d', 'urn:schemas-microsoft-com:xml-diffgram-v1'); 
      $result = $sxe->xpath("//NewDataSet"); 
      echo "<pre>"; 
      //print_r($result[0]); 
      foreach ($result[0] as $title) { 
       print_r($title); 
       //echo $title->CityID; 
     } 
関連する問題