快速业务通道

用XPath在PHP Web站点中显示Google Calendar事件

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
所有事件 条目,可以用 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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号