用XPath在PHP Web站点中显示Google Calendar事件
所有事件 条目,可以用 foreach 迭代程序来处理。对于每个事件条目,将比较 gd:eventStatus 元素的值属性与 确认事件的已知值。注意,无需为 element 标记指定 gd: 前缀。PHP DOM API 知道名称空间,并且需要 删除 gd: 前缀,否则解析器将找不到想要的元素。
如果确认了事件条目,则将检索 title、gd:when 和 gd:where 元素。gd:when 和 gd:where 元素要 求请求具体属性,例如 startTime 和 valueString。需要以方便阅读的方法显示事件日期并且解析 gd:when 元素的 startTime 属性将其转换为表示时间的长整数。然后将此信息传递给带有常用显示格式 的日期函数。 DOM API 的一个缺点是有些冗长。虽然每条语句的目的十分明确,因为它匹配算法的文本描述,但是 它不像代码包一样扼要。DOMNode 和 DOMDocument 类的 getElementsByTagName 和 getAttributeNode 方法将添加相当多的代码。 用 SAX 解析摘要 另一个可用于 PHP 的 XML 解析 API 是 Simple API for XML (SAX) API。DOM API 具有可读性但冗 长,而 SAX 可以很简要但难于遵循,即使是对于有经验的开发人员。SAX 与 DOM 之间的差别在于 SAX 不把整个 XML 文档装载到内存中,而 DOM 却这样做。高效的 SAX 处理代码可以快得多,而内存使用量 可以保持在最低并且可以根据应用程序的具体需求来调整。使用 DOM,内存使用量要求从应用程序处理的 最大 XML 文档大小开始向上攀升。 清单 6 是 SAX 处理 Google Calendar 事件摘要的示例片段。要获得完整示例,请参考 下载 部分中 提供的示例脚本包中的 sax_sample.php 脚本。 清单 6. 用 SAX API 解析 Google Calendar 事件摘要 function startElement( $parser, $tagName, $attr ) { global $g_entries, $g_tagName, $g_confirmed, $g_is_confirmed, $g_in_entry, $g_in_originalevent; if ( $tagName == ''ENTRY'' ) { if ($g_is_confirmed || count( $g_entries ) == 0) { $g_entries []= array(); } $g_is_confirmed = false; $g_in_entry = true; } else if ($tagName == ''GD:EVENTSTATUS'') { if ($attr[''VALUE''] == $g_confirmed) { $g_is_confirmed = true; } } else if ($tagName == ''GD:WHEN'' && $g_is_confirmed && $g_in_originalevent == false) { $startTime = date( "l jS \o\f F Y - h:i A", strtotime($attr [''STARTTIME'']) ); $g_entries[ count( $g_entries ) - 1 ][''when''] = $startTime; } else if ($tagName == ''GD:WHERE'' && $g_is_confirmed) { $g_entries[ count( $g_entries ) - 1 ][''where''] = $attr[''VALUESTRING'']; } else if ( $tagName == ''GD:ORIGINALEVENT'' ) { $g_in_originalevent = true; } $g_tagName = $tagName; } function endElement( $parser, $tagName ) { global $g_tagName, $g_in_entry, $g_in_originalevent; if ( $tagName == ''ENTRY'' ) { $g_in_entry = false; } else if ( $tagName == ''GD:ORIGINALEVENT'' ) { $g_in_originalevent = false; } $g_tagName = null; } function textData( $parser, $text ) { global $g_entries, $g_tagName, $g_in_entry; if ($g_tagName = |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |