Получить тег iso8601.time из SimpleXMLElement в PHP - PullRequest
0 голосов
/ 03 ноября 2010

У меня есть функция ниже.Я хочу добавить поддержку формата времени iso8601, но просто не могу заставить его работать.Так как я в php не могу сделать (string)$tag->iso8601.time.Есть ли способ получить элемент iso8601.time?tag является SimpleXMLElement.

private function _tagToPhpType($tag) {
        /*
         *  <i4> or <int>   four-byte signed integer    -12
         *  <boolean>   0 (false) or 1 (true)   1
         *  <string>    string  hello world
         *  <double>    double-precision signed floating point number   -12.214
         *  <dateTime.iso8601>  date/time   19980717T14:08:55
         *  <base64>    base64-encoded binary   eW91IGNhbid0IHJlYWQgdGhpcyE=
         *       
         *  Source: http://www.xmlrpc.com/spec
         */

        if(!empty($tag->string)) {
            return (string)$tag->string;
        }
        elseif(!empty($tag->int)) {
            return (int)$tag->int;
        }
        elseif(!empty($tag->i4)) {
            return (int)$tag->i4;
        }
        elseif(!empty($tag->boolean)) {
            return (bool)$tag->boolean;
        }
        elseif(!empty($tag->double)) {
            return (double)$tag->double;
        }
        elseif(!empty($tag->base64)) {
            // @todo: Decode BASE64
            return (int)$tag->base64;
        } // @todo: Add iso8601 time type
        else {
            return (string)$tag;
        }
    }

1 Ответ

1 голос
/ 03 ноября 2010

Как отмечено в руководстве ( Основное использование SimpleXML ) и в соответствующем примере (# 3):

Доступ к элементам в документе XML, которые содержат символы, не разрешенные в PHPСоглашение об именовании (например, дефис) может быть достигнуто путем инкапсуляции имени элемента в фигурные скобки и апостроф.

Так что в вашем случае $tag->{'dateTime.iso8601'} получит элемент <dateTime.iso8601>.

(Ваш iso8601.time не соответствует комментарию в коде, хотя, если вам нужно получить этот тег, тогда будет легко разобраться с ответом выше.)

...