我有以下功能。我想添加对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;
}
}
答案 0 :(得分:1)
如手册(SimpleXML basic usage)和相关示例(#3)中所述:
通过将元素名称封装在大括号和撇号中,可以访问包含PHP命名约定下不允许的字符的XML文档中的元素(例如连字符)。
因此,在您的情况下$tag->{'dateTime.iso8601'}
将获得<dateTime.iso8601>
元素。
(您的iso8601.time
与代码中的注释不匹配,但如果您需要获取该标记,则应该很容易从上面的答案中找到答案。) < / p>