在SoapUI中为Property Transfer选择多个字段

时间:2014-06-09 12:17:54

标签: xml web-services soap xpath soapui

我希望有人可以帮我使用SoapUI的Web服务吗?

我创建了 TestSteps 来对用户进行身份验证,搜索数据然后将该数据导出到Excel文件中。我遇到的问题是我每次只获取一行数据,而我需要XML响应文件中提供的完整100条记录。

当我发出SOAP请求时,响应的XML文件包含我要提取的 UID 标记内的数据字段:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
      <ns2:searchResponse xmlns:ns2="http://woksearch.v3.wokmws.thomsonreuters.com">
         <return>
             <queryId>1</queryId>
             <recordsFound>3648</recordsFound>
             <recordsSearched>38406647</recordsSearched>
             <records><records     xmlns="http://scientific.thomsonreuters.com/schema/wok5.4/public/Fields">
<REC r_id_disclaimer="ResearcherID data provided by Thomson Reuters">    <UID>WOS:A1993LC48100001</UID><static_data></static_data><dynamic_data><cluster_related>    </cluster_related></dynamic_data></REC>
<REC r_id_disclaimer="ResearcherID data provided by Thomson Reuters">    <UID>WOS:A1993LE28400012</UID><static_data></static_data><dynamic_data><cluster_related>    </cluster_related></dynamic_data></REC>
<REC r_id_disclaimer="ResearcherID data provided by Thomson Reuters">    <UID>WOS:000239231100002</UID><static_data></static_data><dynamic_data><cluster_related>    </cluster_related></dynamic_data></REC>
<REC r_id_disclaimer="ResearcherID data provided by Thomson Reuters">    <UID>WOS:000225797900011</UID><static_data></static_data><dynamic_data><cluster_related>    </cluster_related></dynamic_data></REC>
<REC r_id_disclaimer="ResearcherID data provided by Thomson Reuters">    <UID>WOS:000249142800001</UID><static_data></static_data><dynamic_data><cluster_related>    </cluster_related></dynamic_data></REC>
<REC r_id_disclaimer="ResearcherID data provided by Thomson Reuters">    <UID>WOS:000071234000001</UID><static_data></static_data><dynamic_data><cluster_related>    </cluster_related></dynamic_data></REC>
<REC r_id_disclaimer="ResearcherID data provided by Thomson Reuters">    <UID>WOS:000292046900004</UID><static_data></static_data><dynamic_data><cluster_related>    </cluster_related></dynamic_data></REC>
<REC r_id_disclaimer="ResearcherID data provided by Thomson Reuters">    <UID>WOS:A1992JR22700001</UID> ....etc.

我正在尝试使用 Property Transfer 将所有这些 UID 值作为列表,并将它们插入到 uid 之间的另一个SOAP请求中标签。然后,对此SOAP请求的响应将为我提供有关每条记录的详细数据。

不幸的是,无论我尝试什么,它都只会返回并传递一条记录,而不是完整的100条记录。

目前我在 Property Transfer 中作为来源的XPath是:

declare namespace     ns1='http://scientific.thomsonreuters.com/schema/wok5.4/public/Fields';
declare namespace ns2='http://woksearch.v3.wokmws.thomsonreuters.com';
//ns2:searchResponse[1]/return[1]/records[1]/ns1:records[1]/ns1:REC/ns1:UID[1]

记录标记下,每个 UID 值都存储在单独的 REC 标记中,因此我需要遍历 REC 标记,每次都选择 UID 值。

下图显示了文件的层次结构布局以及嵌套在 REC 值中的 UID 值的位置:

*原来我无法发布图片,因为我的声誉太低了!嵌套是这样的:

<searchResponse>
    <return>
        <records>
            <records>
                <REC>
                    <UID>WOS: DDKJ7898dIJH</UID>
                </REC>
                <REC>
                    <UID>WOS: OIJS897JBSSS</UID>
                </REC>
                etc...

有谁知道如何将所有这些值传递给另一个SOAP请求?我尝试了许多不同的XPath变种无济于事。我还尝试使用 DataSink 将所有 UID 值拉入电子表格,然后使用 DataSource 将其导入到其他请求中,但我可以仍然只能一次传输一个值!

非常感谢任何帮助!

感谢您的时间,

约翰

2 个答案:

答案 0 :(得分:1)

利用Property transfer的解决方案是(确保检查XQuery):

declare namespace ns1='http://scientific.thomsonreuters.com/schema/wok5.4/public/Fields';
declare namespace ns2='http://woksearch.v3.wokmws.thomsonreuters.com';
<UID>
{
for $id in //ns1:UID 
return string($id)
}
</UID>

输出格式为:

<UID>WOS:A1993LC48100001 WOS:A1993LE28400012 WOS:000239231100002 WOS:000225797900011 WOS:000249142800001 WOS:000071234000001 WOS:000292046900004</UID>

答案 1 :(得分:0)

一种可能的方法是这样的:

  1. 首次拨打电话以检索所有UID。
  2. 使用type = XML创建一个DataSource以提取所有UID。
  3. 动态创建第二个电话(在下面的第5步中)。有关如何完成此操作的提示,请参阅my blog post
  4. 循环执行步骤2中的所有值。
  5. 拨打第二个电话。