【问题标题】:How to deduct one day from the date in xpath?如何从xpath中的日期减去一天?
【发布时间】:2015-11-30 15:13:09
【问题描述】:

我使用 SOAPUI 免费版编写自动化测试。 我有我从 sql 数据库中获取的日期格式:

2015-11-30 13:38:58.387

我需要将其转换为如下格式:

2015-11-30T13:38:58.387 or 2015-11-30

并从中减去一天,这样得到的日期减去一天。

我尝试使用 previous-day()function 和 substring-before()(使用 XPath):

previous-day(substring-before((//*:Results/*:ResultSet/*:Row/*:VALIDFROM/text()), ' '))

但它总是给出如下错误:

net.sf.saxon.trans.XPathException:XPath syntax error at char 87 {../*:Row/*:VALIDFROM/text()..}: Unknown system function previous-day()

为什么这些功能不起作用?

谢谢

【问题讨论】:

  • 您对 XPath 的使用表明您没有正确处理 XML 命名空间。你也应该解决这个问题,这并不难。
  • previous-day() 函数不起作用的原因是它不存在。是什么让你认为它做到了?

标签: datetime xpath soapui saxon


【解决方案1】:

试试这个:

xs:dateTime(translate(//x, ' ', 'T')) - xs:dayTimeDuration('P1D')

//x 代表您的节点选择。

向在 cmets 中指出这一点的 Michael Kay 致敬。

【讨论】:

  • 或者xs:dateTime(translate(//x, ' ', 'T')) - xs:dayTimeDuration('P1D')
  • 几乎,这并没有考虑到 T-SQL 日期时间所具有的点。
  • 小数秒在 xs:dateTime 值中是非常合法的。
  • @MichaelKay 谢谢你,你当然是对的。我冒昧地用您更简单的建议更新了我的答案。
  • 感谢您的建议。我使用这个变体:xs:date(substring-before(//*:Results/*:ResultSet/*:Row/*:VALIDFROM, ' ')) - xs:dayTimeDuration('P1D'),它给了我:Sat Oct 03 02:00:00 CEST 2015,但我需要如下格式:2015-11-30T13:38:58.3872015-11-30 你知道这里可以使用什么函数吗?
猜你喜欢
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-06
  • 2010-11-20
  • 2012-10-07
  • 1970-01-01
相关资源
最近更新 更多