我需要选择一个节点,其日期+时区元素必须等于某个已知日期( 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中运行它。
答案 0 :(得分:1)
由于您的查询中没有时间/时区,因此您看起来并不能真正有效地使用时区信息。您缺乏信息,因此您永远无法获得所需的结果。但是,您只能比较日期。
您可以检查查询日期是否包含在任何BuildDate
个节点中:
//Root/Houses/House[BuildDate[contains(text(),'2005-09-01')]]/Price/text()
或基本相同的
//Root/Houses/House[contains(BuildDate/text(),'2005-09-01')]/Price/text()
这是非常好的XPath 1.0。
答案 1 :(得分:0)
由于这里的日期是文本,您可以直接进行字符串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()
注意: - 添加了另一个具有相同日期但价格不同的商品。