新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > 数据库 > DB2教程 > 正文:利用DB2 9原生XML和PHP来简化XML应用程序

利用DB2 9原生XML和PHP来简化XML应用程序

新客网 XKER.COM 2006-08-27 来源: 收藏本文


客户添加到购物车中的货品保存为客户端 cookie。此 cookie 在 PHP 中以关联数组形式读入并指定给变量 $cart。

图 8. 购物车

购物车

DB2 Viper

Web 服务提供商和查询
  1. 同样,我们已经使用 XQuery 将输出版面和业务逻辑嵌入到一个查询中。除了购物车信息,Web 服务还接受销售税率参数,购物车信息为一个包含产品 ID 及各自数量的 XML 文档。这使我们可以将购物车信息作为 XML 值传递到 XQuery 中。




    function getCart($cart, $taxrate) {

    global $conn;

    $result = "";

    $xquery =

    for $dummy in (1)


  2. 在 XQuery 中,与其他任何原生 XML 文档一样,变量 $cart 可以进行迭代:





    let $items := for $i in $cart/items/item

    let $product := db2-fn:xmlcolumn("XMLPRODUCT.DESCRIPTION")

    /product[@pid =

    $i/@pid]/description

    let $name := $product/name/text()

    let $price := $product/price/text()

    let $itemPrice := if($price = 0 or empty($price)) then ("$0.00")

    else (concat("$", $price))

    return



  3. 对于每个货品,使用从购物车信息传递的数量和从数据库中的产品目录信息获取的价格,计算该货品的总价:









    return



    {$price * $i/@quantity}



    {$name}



    {xs:integer($i/@quantity)}

    Remove



    {$itemPrice}



  4. 返回 XML(XHTML)结构,包含每个货品的总价计算以及发布信息:









    {$items}

    Subtotal



  5. 从返回的结构计算购物车中所有货品的总价。我们实际上将查询的一部分的输出作为该查询的另一部分的输入变量。













    Total all

    ${ sum( $items/noframes/text() ) }

    Tax

    ({$tax * 100}%)


  6. 使用从客户机传递到 Web 服务的税变量计算付款。

    注意: 上面计算的所有货品的总价可以使用 let 语句分配给一个变量。然后此变量可以用于计算税和总付款。











    =

    =;


    ${ xs:decimal(sum($items/noframes/text()))

    * $tax }


    Grand Total<

    /strong>


    ${ xs:decimal(sum($items/noframes/text())) * (1 + $tax) } <

    /strong>



    我们留给读者一个练习,以更好的形式重写循环的最外层。
  7. 虽然 XQuery 不支持运行时参数绑定,但是有一个解决方案。运行时参数可通过使用 XMLQuery 函数的 PASSING BY 子句传递到 XQuery 中:



    $stmt = db2_prepare($conn, "VALUES( XMLSERIALIZE(

    XMLQUERY($xquery' PASSING BY

    REF CAST(? AS XML) AS \"cart\" , CAST(? AS DECIMAL

    (10,8)) AS \"tax\" RETURNING

    SEQUENCE) AS CLOB(32K)))");


    注意,购物车信息以 XML 字符串的形式传递到查询中。此字符串通过使用 CAST (? As XML) 函数转换为 XML 类型。
  8. 如果查询注册为存储过程,则运行此 Web 服务所需的 PHP 代码将简化为以下几行:



    if($stmt) {

    if(!db2_execute($stmt, array($cart, $taxrate))) {

    return db2_stmt_errormsg($stmt);

    }

    list($result) = db2_fetch_array($stmt);

    if(!$result) return db2_stmt_errormsg($stmt);

    } else {

    $result = db2_stmt_errormsg();

    }return $result;

    }


  9. 注册 Web 服务:



    $server = new SoapServer(null, array(uri' =

    > http://ibm.com/db2/xml/php'));

    $server->addFunction(getCart');

    $server->handle(); ?>


正如可以从以上代码示例中看到的,使用 PHP 和 DB2 原生 XML 支持创建 Web 服务非常简单。而且,由于服务简单,我们不需要定义 WSDL(Web Services Description Language,Web 服务描述语言)文档。

Web 服务客户机

现在可以从客户机代码调用此 Web 服务,在 Web 站点中显示购物车信息。实际购物车页面就是一个调用 Web 服务的客户机。
  1. 创建购物车信息的 XML 字符串,它将作为参数传递到 Web 服务:




    $cartXML = "";

    foreach($cart as $cpid => $quantity) {

    $cartXML .= "";

    }

    $cartXML .= "
    ";


收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐