2010-11-03 24 views
0

我有下面的函數。我想添加對iso8601時間格式的支持,但我無法讓它工作。由於我在php中不能做(string)$tag->iso8601.time。有沒有辦法獲得iso8601.time元素? tagSimpleXMLElement從PHP中的SimpleXMLElement獲取iso8601.time標記

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

由於手冊(SimpleXML basic usage)中指出的和相關的實施例(#3):含有下PHP的命名約定不允許字符的XML文檔內

訪問元件(例如連字符)可以通過在大括號和撇號中封裝元素名稱來完成。

所以在你的情況下,$tag->{'dateTime.iso8601'}將得到<dateTime.iso8601>元素。

(您iso8601.time不匹配在代碼中的註釋,但如果你需要獲得該標籤,那麼它應該很容易從工作答案上面。)