SoapUI Property Transfer:如何使用xpath从XML中提取项目?

时间:2015-02-02 18:18:51

标签: xml rest xpath soapui

我正在我的机器上运行SoapUI以检查一些RESTful Web服务。

服务器给我以下结构

<Response xmlns="http://localhost/filter">
    <data>
          <e>
              <ticket>
                  <reason>Bla bla bla</reason>
                  <number>98765</number>
              </ticket>
              <number>1234</number>
              <content>Some stuff here</content>
          </e>
          <e>
              <number>23455</number>
              <content>Some stuff here 2</content>
          </e>
    </data>
</Response>

我想运行一些测试用例,但我需要常规号码(此处:1234,23455)。

//*:number[1]

只给我票号(这里:98765)。运行时

//*:content[1]

它带来了“这里的一些东西”这个短语,所以它似乎有效,因为它选择了正确的xml结构。 但是为什么SoapUI给我发错了号码?

我尝试使用命名空间,但它也没有用。最重要的是,SO成员在另一个主题中说,命名空间不是强制性的。

编辑: 现在,它的工作原理。 我试过了 albciff提出的this解决方案。 使用

(//*[local-name()='number'])[1]

而不是

//*[local-name()='number'][1]

会奏效。声明仍然需要括号。

1 个答案:

答案 0 :(得分:1)

//*:number[1]//*[local-name() = 'number'][1]选择输入文档中所有 number元素,这些元素是其父元素的第一个子元素:

<number>98765</number>
-----------------------
<number>1234</number>
-----------------------
<number>23455</number>

我怀疑你的XPath环境只返回第一个结果节点(如果有的话)。要选择其他数字,您可以使用

//*:e/*:number[1]

//*[local-name() = 'e']/*[local-name() = 'number'][1]

,结果将是(个别结果由-------分隔):

<number>1234</number>
-----------------------
<number>23455</number>

同样,您的XPath引擎很可能只返回第一个结果。