我正在我的机器上运行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]
会奏效。声明仍然需要括号。
答案 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引擎很可能只返回第一个结果。