将XPath节点的Date+TimeZone与Date进行比较



我需要选择一个节点,它的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,其BuildDate2005-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()

注意:-添加了一个相同日期但不同价格的项目。

相关内容

  • 没有找到相关文章

最新更新