科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道利用DB2 9原生XML和PHP来简化XML应用程序

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文讲述了模式演化对应用程序的影响,并通过使用情景向用户说明设置 PHP 环境的容易程度;将DB2原生XML 功能与PHP应用程序(包括用PHP和 XQuery编写的Web服务)集成的容易程度。

作者:Hardeep Singh 来源:IT专家网 2008年6月5日

关键字: IBM 数据库 DB2

  • 评论
  • 分享微博
  • 分享邮件
  1. 对于每个货品,使用从购物车信息传递的数量和从数据库中的产品目录信息获取的价格,计算该货品的总价:

    return

    {$price * $i/@quantity}

    {$name}

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

    {$itemPrice}

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


    {$items}
    Subtotal

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


    Total all
    ${ sum( $items/noframes/text() ) }
    Tax
    ({$tax * 100}%)

  4. 使用从客户机传递到 Web 服务的税变量计算付款。
    注意: 上面计算的所有货品的总价可以使用 let 语句分配给一个变量。然后此变量可以用于计算税和总付款。

    =
    =;

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

    Grand Total<
    /strong>

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

    我们留给读者一个练习,以更好的形式重写循环的最外层。
  5. 虽然 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 类型。
  6. 如果查询注册为存储过程,则运行此 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;
    }

  7. 注册 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 .= "
    ";

  2. 连接 Web 服务:

    $client = new SoapClient(null, array(location' =>
    http://127.0.0.1/cartsvc.php',
    uri' => http://ibm.com/db2/xml/php'));
    $taxrate = 0.0;

  3. 调用 Web 服务并将返回的字符串输出到浏览器:

    echo $client->getCart($cartXML, $taxrate); ?>

    注意: 因为购物车作为 Web 服务来实现,所以可以从任何语言调用它。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章