我使用xQuery进行SoapUI的自动化测试,而我在尝试验证Tag是否存在时遇到了一些问题。 我有以下XML:
<Results>
<ResultSet fetchSize="10">
<Row rowNumber="1">
<FCTAAPLI>2309516299-0</FCTAAPLI>
<FDATA>2017-05-05 00:00:00</FDATA>
<FVALOR>0.02</FVALOR>
</Row>
<Row rowNumber="2">
<FCTAAPLI>2312518455-1</FCTAAPLI>
<FDATA>2017-05-05 00:00:00</FDATA>
<FVALOR>0.54</FVALOR>
</Row>
</ResultSet>
</Results>
我试图使用以下代码:
<Results>
{
for $z in //ResultSet/Row
where $z/FCTAAPLI = "${Properties#NUM_APLICACAO}"
return if (string($z) = "")
then 0
else
number($z/FVALOR)
}
</Results>
修改
我想要做的是:遍历行元素,搜索特定的FCTAAPLI号码。如果找到该数字,则应返回FVALOR标记上的值。这一点很好。
问题是,当没有元素匹配所需的FCTAAPLI号码时,我想返回0.但是,由于没有返回任何元素,我在验证时遇到了一些麻烦。
当找到FCTAAPLI号码时,一切正常,返回FVALOR,但是当找不到FCTAAPLI时,它只返回标签[&lt;结果/&gt;]。 我尝试使用空($ z)并存在($ z),但它也没有用。 我怎么能解决这个问题?
答案 0 :(得分:5)
您的“where”条件表示您只对$z/FCTAAPLI = "${Properties#NUM_APLICACAO}"
的行感兴趣,但您对问题的描述表明您还希望在不是这种情况的情况下输出。
我不知道string($z) = ""
背后的想法是什么。示例数据中的所有行都没有零长度的字符串值,因此我不知道这个条件的目的是什么。
此时我意识到你并没有真正说出你想要查询的内容。你说它在某些条件下有效并且在其他条件下不起作用,但是如果不知道“正确答案”应该是什么,就很难纠正它。
也许你想要的东西是:
<Results>
{
for $z in //ResultSet/Row
return if $z/FCTAAPLI = "${Properties#NUM_APLICACAO}"
then number($z/FVALOR)
else 0
}
</Results>
但这是一个非常疯狂的猜测。
== LATER ==
根据您修改的要求声明,您似乎只想要
(//ResultSet/Row
[FCTAAPLI = "${Properties#NUM_APLICACAO}"]/number($z/FVALOR), 0)[1]
成语
(a/b/c, $default)[1]
在第一次遇到时看起来很奇怪,但它非常有用:如果有a/b/c
,则返回$default
选择的第一个项目,否则返回@Email
private String email;
。