XPath выберите даты после преобразования часового пояса - PullRequest
0 голосов
/ 16 марта 2011

со следующим 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."')]]");

Надеюсь, что это имеет смысл.

1 Ответ

0 голосов
/ 16 марта 2011

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...