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>

这一切都很好,直到我只想从数据集中检索一个国家,例如阿尔及利亚。这是因为我想将国家名称转移到下一个测试步骤,这是一项将国家名称作为请求的服务。我试图从响应中选择节点,但是我注意到我得到的 XPath 指向整个响应而不是其中一个节点

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

我想这对你们中的一些人来说可能是一个非常简单的问题,但是我的 XPath 技能有点限制了我自己解决它的能力。如果有人可以提供帮助,将不胜感激。

4

2 回答 2

0

Following XPath expression getting full response is exacted.

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

Because its GetCountriesResult holds CDATA value and it's not parsed by the XML parser. So you need to get the result and put it in temporary stream and then parse and get the value.

于 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 回答