我需要选择一个节点,它的date+timezone元素必须等于某个已知日期(XPath 1.0),即:
<Root>
<Houses>
<House>
<BuildDate>2001-05-11-06:00</BuildDate>
<Price>$400,000</Price>
</House>
<House>
<BuildDate>2005-09-01-05:00</BuildDate>
<Price>$300,000</Price>
</House>
<House>
<BuildDate>2004-10-11-06:00</BuildDate>
<Price>$200,000</Price>
</House>
</Houses>
</Root>
我需要选择一个Price
,其BuildDate
是2005-09-01(注意缺少时区)。输入只能是日期(2005-09-01)。我有的是:
//Root/Houses/House[BuildDate[text()='2005-09-01']]/Price/text()
然而,由于日期有时区,这种比较永远不会产生任何结果。我使用Groovy脚本在SoapUI 4.6.4中运行此脚本。
看起来您实际上不能有意义地使用时区信息,因为您的查询中没有时间/时区。你缺乏信息,所以你永远无法得到想要的结果。但是,您可以只比较日期。
您可以检查查询的日期是否包含在任何BuildDate
节点中:
//Root/Houses/House[BuildDate[contains(text(),'2005-09-01')]]/Price/text()
或者本质上相同的
//Root/Houses/House[contains(BuildDate/text(),'2005-09-01')]/Price/text()
由于日期在这里是文本,您可以直接执行字符串contains
检查。使用XmlSlurper,它将类似于:
def xml = '''
<Root>
<Houses>
<House>
<BuildDate>2001-05-11-06:00</BuildDate>
<Price>$400,000</Price>
</House>
<House>
<BuildDate>2005-09-01-05:00</BuildDate>
<Price>$300,000</Price>
</House>
<House>
<BuildDate>2005-09-01-11:00</BuildDate>
<Price>$600,000</Price>
</House>
<House>
<BuildDate>2004-10-11-06:00</BuildDate>
<Price>$200,000</Price>
</House>
</Houses>
</Root>
'''
def parsed = new XmlSlurper().parseText( xml )
def myDate = '2005-09-01'
parsed.Houses.House.findAll { it.BuildDate.text().contains( myDate ) }
.Price*.text()
注意:-添加了一个相同日期但不同价格的项目。