图 3. 创建新的保单请求的 Web 站点。
      如图链接地址:http://www.uml.org.cn/AJAX/images/czp58l946653.jpg 图 3 展示了用于创建新的保单请求的 Web 页面。当用户单击 Submit 按钮后,JavaScript 函数 submitPolicy() 被调用(见清单 1)。该函数向 PHP 应用程序 createNewPolicy.php 发出一个 HTTP 请求,以获得一个空白的保单。它还设置一个回调函数 fillPolicy(),用于捕捉从 HTTP 请求返回的事件。 如图链接地址:http://www.uml.org.cn/AJAX/images/201k9126r4my.jpg当第一个请求到达中间层的 PHP 应用服务器时,一个新的 XML 保单文档被装载到 SimpleXML 对象中。通过使用 SimpleXML API,用 PHP 应用程序中创建的 GUID 更新 TransRefGUID 元素。   header('Content-type: text/xml');   $fileContents = file_get_contents("$basedir/acord.xml");   $dom = simplexml_load_string($fileContents);   $dom->TXLifeRequest->TransRefGUID=$guid;   echo $dom->asXML();   然后,这个文档被发送到客户机。   对于本文,我们假设 GUID 是通过某种机制(例如时间和随机数的组合)创建的。更重要的是理解如何将表示保单的 XML 文档视作内存中的业务对象层次结构,以及如何使用 SimpleXML API (或 DOM/XPath)来导航和更新这个对象。   填充基本客户信息   在 Web 客户机中,fillPolicy() 函数读取返回的值。现在,包含返回 XML 的内存中表示的 DOM 对象可用于操纵保单文档。客户在 Web 页面上输入的信息被直接用于更新 DOM。当使用客户信息更新了保单之后,使用 XMLHTTP 将修改后的 DOM 对象提交回 PHP 应用程序(见清单 2)。即使是 HTML 组件值也是用 DHTMLDocument Object Model (DOM) 读取的。如图链接地址:http://www.uml.org.cn/AJAX/images/z5b2swc1ny92.jpg

解决方案 »

  1.   

    将保单存储在 DB2 中   PHP 应用程序将传入的 XML 文档直接存储在数据库中,而不需要解析它(见清单 3)。DB2 的 pureXML 支持将隐式地解析传入的 XML,并将其存储在一个类 DOM 的分层结构中。现在,可以在 XQuery 语句中使用 XPath 之类的 XML 导航技术(就像在 DOM 中使用的那样)来查询 XML。DB2 9 还提供了在该层次结构中的任何节点上索引的能力。
    如下链接地址:http://www.uml.org.cn/AJAX/images/52uacm84469s.jpg公开 XML 文档上的服务   新的保单存储在 DB2 9 中以后,保险代理可以查询该保单,以决定是否接受这个保险。用于获得关于新保单报告的查询通过 Web 服务公开给客户机应用程序。   这个例子中的 Web 服务是用 PHP 编写的,它为调用实现服务的业务和转换逻辑的 DB2 存储过程提供了一个简洁的接口。每个 DB2 存储过程由一个 SQL/XML 查询组成,它过滤和转换存储在数据库中的 XML 保单,以创建一个输出 XML 文档。然后,该 PHP Web 服务将 XML 文档返回给客户机。   我们来分析每个存储过程,看看那些有效地组成 Web 服务实现的查询。如下链接地址:http://www.uml.org.cn/AJAX/images/n3837eq4ei24.jpg列出所有新客户保险的 DB2 查询。包含该查询的存储过程是listAllNewCustomers(见清单 4)。该查询搜索 ACORD 表的 INFO 列中的所有保单文档。在每个 XML 文档中,DB2 进一步向下分析,以便只返回 PolicyStatus/@tc 属性的代码值被设为 12(也就是建议的值)的那些文档。查询输出是一个 XML 文档,它有一个根节点 newpolicylist,该节点包含一系列的用于每个新保单的 TXLife 子节点(见图 4)。   图 4. 返回新保单列表的 SQL/XML 查询
        如下链接地址:http://www.uml.org.cn/AJAX/images/4xyn5m4xtfq1.jpg注意这个查询第一次如何使用 DB2 XQuery 函数 db2-fn:xmlcolumn 来导航关系模式,以定位到 XML 列 DB2ADMIN.ACORD.INFO。当它到达 XML 列时,它进一步使用 XPath 在 XML 模式中导航到适当的节点(类似于使用 PHP、JavaScript 或其他语言导航 DOM)。   列出有风险客户的提议保险的 DB2 查询。该查询只列出有风险的新客户(也就是说,他们对于某个医疗问题的回答是 yes)。该查询包含在一个名为 listAtRiskNewCustomers 的存储过程中(见清单 5)。 注意:WHERE 子句同时检查答案和保单状态。
    如下链接地址:http://www.uml.org.cn/AJAX/images/6gy81v4645y4.jpg
    评估有风险新客户的风险度的 DB2 查询。对于以上列表中的每个保单,在保单的健康风险区域只能列出回答为 yes 的问题。该查询还返回 policytype,以显示该保单值多少钱,以便评估风险。包含该查询的存储过程(见清单 6)是 getRiskQuestions(guid)。 注意:您需要一个支持 XML 类型的 DB2 驱动程序版本。否则,在每个存储过程中都需要使用 XMLSerialize 来从 XMLQuery 中串行化 XML 值。请参阅 developerWorks 文章 “结合使用 DB2 原生 XML 与 PHP” 以获得更详细的信息。
    如下链接地址:http://www.uml.org.cn/AJAX/images/btm3b654qx6g.jpg创建 Web 服务   用于 getnewpolicyinfo Web 服务的 PHP 代码是一个瘦包装器,它检查所需保单报告的类型,并调用适当的存储过程。然后,将存储过程所返回的值发送回客户机(见清单 7)。注意用 PHP 创建 Web 服务是多么简单。最后三行将该功能公开为一个 Web 服务。在任何客户机中,包括在 PHP 应用程序中,都可以调用 Web 服务,如清单 8 所示。
        如图:图片链接地址:http://www.uml.org.cn/AJAX/images/i7u11b3nv1a0.jpg
                          http://www.uml.org.cn/AJAX/images/6y6vf07289uq.jpg结束语   在过去几年中,各应用程序层的 XML 支持都已成熟,这导致一种强大的开发环境的出现,这种开发环境可以改变企业应用的设计方式。XML 使开发人员可以为业务文档定义规则和结构,还可以在内存中将文档实例化为分层对象,开发人员可以在任何层使用标准 API 对这种对象进行导航、修改和串行化。Ajax 使基于 Web 的客户机脚本可以调用 DOM API,还可以对中间层进行远程过程调用。PHP 为处理 XML 和 Web 服务提供了最简单的方法之一,因此非常适合基于 XML 的应用程序开发。XML 演变的最后一链是数据库层。DB2 9 使数据库层能操纵 XML。因此这个演变周期宣告结束。 以上编程思想供大家欣赏,希望专家给点意见或者看法,共同探讨来学习!
    http://www.uml.org.cn/AJAX/200609152.htm
      

  2.   

    谢谢!
    xml是噩梦!
    至今也没有见到处理xml的简单方法!!!