2011-03-16 65 views
0

下列與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> 

後的XPath選擇日期,我需要能夠根據日期的日期部分進行選擇。首先,雖然這些日期設置爲GMT,但我需要將日期更改爲正確的時區,然後選擇我需要的日期。

即,如果我在尋找日期在2011年10月1日,但格林威治標準時間-5我需要xpath選擇第一個日期,而不是第二個。

我使用PHP和我的代碼是目前這樣,但這並沒有改變日期。

$results = $this->myxml->xpath("//SomeData[MyData/Date[starts-with(.,'".$searchDate."')]]"); 

希望是有道理的。

回答

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>