我有一个XML文档,其结构类似于以下内容:
<list>
<item>
<delivery>
<date>2014-12-31T00:00:00.000Z</date>
<!-- ... -->
</delivery>
<!-- ... -->
</item>
<item>
<delivery>
<date>2014-12-31T01:10:11.000Z</date>
</delivery>
</item>
<item>
<delivery>
<date>2014-12-31T12:30:15.059Z</date>
</delivery>
</item>
</list>
我想要做的是检查交货是否在同一天。 我在SoapUI 5(免费的OSS社区版)中所做的是检查以下情况:
contains(/list/item[*]/delivery/date, "2014-12-31")
SoapUI然后抱怨你不能包含()一个集合。很公平。 然后我尝试了
/list/item[*]/delivery/date[contains(., "2014-12-31")]
但这似乎完整地返回了第一个日期:2014-12-31T00:00:00.000Z
那么,我怎样才能在我的收藏中运行一个包含?或者,我如何检查所有交货的天数是否相同?
答案 0 :(得分:1)
我希望返回<dellivery>
<date>
值包含特定日期的XPath可以帮助您验证所有投放的日期是否相同:
/list/item/delivery[date[contains(., "2014-12-31")]]
我不知道SoapUI所以我只能建议XPath只能解决这个问题:
count(/list/item/delivery[date[not(contains(., "2014-12-31"))]])
如果上面的XPath返回0
表示所有日子都相同; 2014-12-31
。
答案 1 :(得分:1)
XPath无法进行任何类型的循环。正如你所指出的那样,你必须使用计数来伪造它。
你的XPath表达式是:
count(//*:date[text()='${#Response#//*:date}'])
这表示:计算与第一个日期相同的日期数。
您的预期结果将是:
${#Response#count(//*:date)}
这说:计算所有日期的数量。
答案 2 :(得分:1)
我想要做的是检查交货是否在同一天
由于你在评论中说你有XPath 2.0可用,那么
怎么样count(distinct-values(
for $date in /list/item/delivery/date return substring($date, 1, 10)
)) = 1
换句话说,取每次交货日期和时间的一部分并删除重复项,如果您最后只剩下一项,那么您就知道所有日期都是相同的。