从PHP中的SimpleXMLElement获取iso8601.time标记

时间:2010-11-03 12:15:05

标签: php simplexml

我有以下功能。我想添加对iso8601时间格式的支持,但我无法让它工作。因为我在php中无法做(string)$tag->iso8601.time。有没有办法获得iso8601.time元素? tagSimpleXMLElement

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 个答案:

答案 0 :(得分:1)

如手册(SimpleXML basic usage)和相关示例(#3)中所述:

  

通过将元素名称封装在大括号和撇号中,可以访问包含PHP命名约定下不允许的字符的XML文档中的元素(例如连字符)。

因此,在您的情况下$tag->{'dateTime.iso8601'}将获得<dateTime.iso8601>元素。

(您的iso8601.time与代码中的注释不匹配,但如果您需要获取该标记,则应该很容易从上面的答案中找到答案。) < / p>