验证缺少的标签 xQuery

Validate missing tag xQuery

我正在使用 xQuery 对 SoapUI 进行自动化测试,我在尝试验证标签是否存在时遇到了一些问题。 我有以下 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>

编辑: 我想要做的是:遍历 Row 元素,搜索特定的 FCTAAPLI 编号。如果找到该数字,则 FVALOR 标签上的值应为 returned。那一点工作正常。
问题是,当没有元素匹配所需的 FCTAAPLI 编号时,我想 return 一个 0。但是,由于没有元素被 returned,我遇到了一些麻烦关于验证这一点。

当找到 FCTAAPLI 编号时,一切正常,FVALOR 被 returned,但是当找不到 FCTAAPLI 时,它 returning 0 而不是它 [=25] =] 是标记 [< Results/ >]。 我试过使用 empty($z) 和 exist($z) 但它也没有用。 关于如何解决这个问题的任何想法?

您的 "where" 条件是说您只对 $z/FCTAAPLI = "${Properties#NUM_APLICACAO}" 所在的行感兴趣,但您对问题的描述表明您还希望在并非如此的情况下输出。

我不知道 string($z) = "" 背后的想法是什么。 None 您的示例数据中的行具有零长度字符串值,因此我不知道这种情况的目的是什么。

此时我意识到您并没有真正说出您希望查询执行的操作。您说它在某些条件下有效,而在其他条件下无效,但是在不知道 "correct answer" 应该是什么的情况下很难更正它。

也许你想要这样的东西:

<Results>
{
for $z in //ResultSet/Row
return if $z/FCTAAPLI = "${Properties#NUM_APLICACAO}"
       then number($z/FVALOR)
       else 0
}
</Results>

但这是一个相当大胆的猜测。

== 稍后 ==

根据您修改后的需求说明,看起来您只是想要

(//ResultSet/Row
   [FCTAAPLI = "${Properties#NUM_APLICACAO}"]/number($z/FVALOR), 0)[1]

成语

(a/b/c, $default)[1]

第一次遇到时看起来很奇怪,但它非常有用:它 returns 如果有 a/b/c 选择的第一个项目,否则 $default 否则。