0

SoapUIとSoapUIProは初めてです。私は最近、財産譲渡の問題に遭遇しましたが、その解決策を探すのに運が悪かったのです。

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スキルは、自分でそれを解決する能力を制限しているようなものです。誰かが助けることができれば大いに感謝します。

4

2 に答える 2

0

XPath式に続いて、完全な応答を取得することが厳密に行われます。

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

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

于 2012-05-08T03:45:53.283 に答える
0

ここに名前空間名を入れてください

$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;
        }
于 2016-08-05T07:31:37.833 に答える