使用以下xml
<SomeData>
<MyData uID="123456">
<MyInfo A="1" B="2" C="3">
<Date>2011-10-02 00:30:00</Date>
</MyData>
<MyData uID="123456">
<MyInfo A="1" B="2" C="3">
<Date>2011-10-01 00:30:00</Date>
</MyData>
<SomeData>
我需要能够根据Date的日期部分进行选择。首先,虽然这些日期设置为GMT,但我需要将日期更改为正确的时区,然后选择我需要的日期。
即如果我在2011-10-01寻找日期,但对于GMT-5,我需要xpath来选择第一个日期而不是第二个日期。
我正在使用php,我的代码目前是这样的,但这并没有改变日期。
$results = $this->myxml->xpath("//SomeData[MyData/Date[starts-with(.,'".$searchDate."')]]");
希望这是有道理的。
答案 0 :(得分:0)
xs:dateTime
数据类型不是XPath 1.0数据模型的一部分,时区转换算法很复杂(假设您必须在标准SQL中执行此操作!)。
我的建议:升级到XPath 2.0引擎
作为概念证明,这个样式表:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:template match="/">
<xsl:copy-of select="
/SomeData/MyData/Date[
xs:dateTime(.) >= xs:dateTime('2011-10-01T00:00:00-05:00')
and
xs:dateTime('2011-10-02T00:00:00-05:00') > xs:dateTime(.)
]"/>
</xsl:template>
</xsl:stylesheet>
通过这个良好的输入:
<SomeData>
<MyData uID="123456">
<MyInfo A="1" B="2" C="3"/>
<Date>2011-10-02T00:30:00</Date>
</MyData>
<MyData uID="123456">
<MyInfo A="1" B="2" C="3"/>
<Date>2011-10-01T00:30:00</Date>
</MyData>
</SomeData>
输出:
<Date>2011-10-02T00:30:00</Date>