如何迭代XQuery路径? 1,4507 1. 2017-02-28T05:10:32.0606654Z 2017-02-28T05:10:32.2267838Z 离开 离开 账户:2015年2月10日xxx 16.666131292069704 打开 1,4507 2. 2017-02-28T05:10:32.0606654Z 2017-02-28T05:10:32.2267838Z 离开 离开 账户:2015年2月10日xxx 16.666131292069704 打开 0 126

如何迭代XQuery路径? 1,4507 1. 2017-02-28T05:10:32.0606654Z 2017-02-28T05:10:32.2267838Z 离开 离开 账户:2015年2月10日xxx 16.666131292069704 打开 1,4507 2. 2017-02-28T05:10:32.0606654Z 2017-02-28T05:10:32.2267838Z 离开 离开 账户:2015年2月10日xxx 16.666131292069704 打开 0 126,xquery,soapui,Xquery,Soapui,以上是我的xml响应: 我想验证每一行的状态是否为打开状态 打开 声明名称空间ns1='https://************/token'; 对于//ns1:Response[1]/ns1:rows[1]中的$x 返回数据($x/ns1:e[1]/ns1:e[10]/text()) 但它并没有返回值。。它只是给出了预期结果中的以下内容 declare namespace ns1='https://**********/token'; <Result> for $x in //

以上是我的xml响应:

我想验证每一行的状态是否为打开状态

打开

声明名称空间ns1='https://************/token';
对于//ns1:Response[1]/ns1:rows[1]中的$x
返回数据($x/ns1:e[1]/ns1:e[10]/text())
但它并没有返回值。。它只是给出了预期结果中的以下内容

declare namespace ns1='https://**********/token';
<Result>
for  $x in //ns1:Response[1]/ns1:rows[1]
return data($x/ns1:e[1]/ns1:e[10]/text())
</Result>
中的$x//ns1:Response[1]/ns1:rows[1]
返回数据($x/ns1:e[1]/ns1:e[2]/text())

它是正确的xquery表达式吗?如果有人选中此项会很有帮助吗?

您应该将XQuery表达式包装在
{}
中,否则它将被视为字符串文字:

<Result>for  $x in //ns1:Response[1]/ns1:rows[1]
return data($x/ns1:e[1]/ns1:e[2]/text())</Result>

但不清楚预期的输出是什么,因为您在每个路径步骤上都使用了精确索引,这将导致表达式一次只匹配一个元素…

您应该将XQuery表达式包装在
{}
中,否则它将被视为字符串文字:

<Result>for  $x in //ns1:Response[1]/ns1:rows[1]
return data($x/ns1:e[1]/ns1:e[2]/text())</Result>

但不清楚预期的输出是什么,因为您在每个路径步骤上都使用了精确的索引,这将导致表达式一次只匹配一个元素…

如果您只想知道每一行都有
e[10]=“Open”
,那么您可以执行以下操作:

<Result>Open</Result>
{empty(/ns1:Rows/*/*[10][.!=“Open”])}

(您的问题标题谈到了迭代。这是一种过程性思维。在XQuery中,就像在SQL中一样,您通常直接对项目集进行操作:您不需要一次迭代一个来处理它们。)

如果您只想知道每一行都有
e[10]=“Open”
,那么您可以执行以下操作:

<Result>Open</Result>
{empty(/ns1:Rows/*/*[10][.!=“Open”])}

(您的问题标题谈到了迭代。这是一种过程性思维。在XQuery中,就像在SQL中一样,您通常直接对项目集进行操作:您不需要一次迭代一个项目来处理它们。)

我觉得这一点很正确,因为我必须做断言:)这个对我来说是正确的,因为我必须这样做:)
<Result>{empty(/ns1:Rows/*/*[10][.!="Open"])}</Result>