新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> XML网站展示,XML源代码,XML编程示例。 本版仅接受原创、转贴、网站展示,具体的技术交流请前往各相关版块。
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 XML源码及示例(仅原创和转载) 』 → 基于XML的购物车的实现 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 8038 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 基于XML的购物车的实现 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     小鞋子 帅哥哟,离线,有人找我吗?
      
      
      威望:6
      头衔:大法師
      等级:大二期末(Java考了96分!)
      文章:353
      积分:958
      门派:XML.ORG.CN
      注册:2003/12/19

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给小鞋子发送一个短消息 把小鞋子加入好友 查看小鞋子的个人资料 搜索小鞋子在『 XML源码及示例(仅原创和转载) 』的所有贴子 引用回复这个贴子 回复这个贴子 查看小鞋子的博客楼主
    发贴心情 基于XML的购物车的实现

    购物车是电子商务网站中不可缺少的组成部分,但目前大多数购物车只能作为一个顾客选中商品的展示,客户端无法将购物车里的内容提取出来满足自己事务处理的需要,而这一点在有些电子商务活动中很有必要。XML的出现使得网络上传输的数据变得有意义起来,我们可以根据不同的要求以不同的样式将一个购物车的内容显示出来。

    本文将详细分析一个由Java实现的基于XML的购物车。下面是一个包含了五件商品的购物车的XML内在结构:它的根元素为cart,total元素表示购物车内的总金额,每个item元素表示一件商品,item里的子元素分别标明了该商品的具体信息,可根据实际情况添加、修改或删除。

    在这里,需要建立一个表示购物车的类:XMLCart.java,它是一个JavaBean,所以它包含了一个空的构造函数。这个类包含了购物车的一些基本功能: 生成一个空的购物车,往购物车里添加商品,删除购物车里的商品,改变购物车内商品的数量以及清空购物车等。它拥有一个全局私有变量“private XMLDocument myCart”,myCart用来存储购物车里的详细内容,购物车的基本功能就是对它的操作,它的类型是XMLDocument,即一个XML文档。这样,对购物车的操作就转换成对myCart中的子元素的添加、删除,及元素值的计算、修改等。

    1. 清空购物车

    清空购物车即生成一个空的购物车。这里空购物车是一个含有根元素cart及其元素total的XML文档,total元素是购物车的总金额,它的初始值为0,其XML具体形式如下:

    < ?xml version=‘1.0’ encoding=‘gb2312’?>
    < cart>
    < total>0< /total>
    < /cart>
    将这个XML字符串由parseString函数转换成XMLDocument存入myCart。
    其代码如下:
    public void emptyCart() throws IOException,SAXException{
        String stringCart=“< ?xml version=‘1.0’encoding=‘gb2312’?> ”+
           “< cart>< total>0< /total>< /cart>”;
          myCart=parseString(stringCart);
        }

    2. 添加商品
    添加商品,即将传入的item元素添加到根元素cart里,
    其中item里包括商品详细信息,
    同时计算total的值。其代码如下:
    public void addItemToCart(String stringItem)
    throws IOException,SAXException{
    //将item由String转换为XMLDocument
    XMLDocument itemAdded=parseString(stringItem);
    //取出item节点,并复制它
    NodeList itemList=itemAdded.getElementsByTagName(“item”);
    Node item=itemList.item(0);
    Node cloneItem=item.cloneNode(true);
    //如果购物车为空,则构造一个新的购物车
    if(isCartEmpty()){
         myCart.emptyCart();
    }
    //如果该商品不在购物车中,则插入该商品,并计算总金额
    if(!isItemExist(item,myCart)){
    //取myCart的根元素,并将复制的item节点添加到后面
    Element cartRoot=myCart.getDocumentElement();
    Node cartNode=cartRoot.appendChild(cloneItem);        
    computeTotal();    //计算总金额
            }
        }
    3. 删除商品
    删除商品,即根据商品代码将该商品的item元素
    从myCart的根元素cart中删除,
    并重新计算total的值:
    public void moveItemFromCart(String id){
    //取出以item为单位的节点集cartList以及根元素cartRoot
      NodeList cartList=myCart.getElementsByTagName(“item”);
         Element cartRoot=myCart.getDocumentElement();
          //在cartList中查找代码为选中id的商品
        for(int x=0;x< cartList.getLength();x++){
          Node itemNode=cartList.item(x);
          String  idValue=itemNode.getFirstChild().
          getFirstChild().getNodeValue();
          //如果找到,则从cartRoot中删除该节点,并跳出循环
    if(idValue.equals(id)){
          itemNode=cartRoot.removeChild(itemNode);
           break;
                }
            }
            computeTotal();    //计算总金额
        }
    4. 改变商品数量
    根据客户在页面上所填的数量,修改myCart中quantity,
    并重新计算total:
    public void addQuantityToCart(String qnty) throws
    IOException,SAXException{
        //将传过来的包含商品数量的一组XML字符串转换为XML文档
    XMLDocument quantityChanged=parseString(qnty);
    //取出包含新数量的quantity节点集和myCart中的quantity节点集
    NodeList quantityList=quantityChanged.getElementsByTagName(“quantity”);
    NodeList cartList=myCart.getElementsByTagName(“quantity”);
    //循环改变商品的数量
    for(int x=0;x< cartList.getLength();x++){
    //将新quantity的值赋给myCart中相应的quantity中去
    String quantity=quantityList.item(x).getFirstChild().getNodeValue();
    cartList.item(x).getFirstChild().setNodeValue(quantity);
    }
    computeTotal();    //计算总金额
        }
    5. 计算总金额
    即计算total的值,其中total=∑(price*quantity):
    public void computeTotal(){
        NodeList quantityList=myCart.getElementsByTagName(“quantity”);
        NodeList priceList=myCart.getElementsByTagName(“price”);
        float total=0;
        //累加总金额
    for(int x=0;x< priceList.getLength();x++){
        float quantity=Float.parseFloat(quantityList.item(x)
        .getFirstChild().getNodeValue());
      float price=Float.parseFloat(priceList.item(x).getFirstChild().getNodeValue());
        total=total+quantity*price;
        }
        //将total附给myCart的total
    String totalString=String.valueOf(total);
        myCart.getElementsByTagName(“total”).
        item(0).getFirstChild().setNodeValue(totalString);
      }
    6. 判断购物车是否为空
    通常在添加新商品时,还需要知道购物车是否为空,
    如果为空的话,则要生成一个新的购物车。
    public boolean isCartEmpty(){
    //item的节点集,如果该节点集包含的节点数为0,则购物车内没有商品,返回true
    NodeList itemList=myCart.getElementsByTagName(“item”);
    if(itemList.getLength()==0) return true;
    else return false;
    }
    7. 判断所选商品是否已在购物车内
    即判断新传来商品的item是否已在myCart中存在,如果存在,返回true。
    public boolean isItemExist(Node item, XMLDocument cart){
      NodeList itemList=cart.getElementsByTagName(“item”);
          Node id=item.getFirstChild();
          String idValue=id.getFirstChild().getNodeValue();
          if(itemList.getLength()!=0){
              for(int x=0;x< itemList.getLength();x++){
               Node itemTemp = itemList.item(x);
              7Node idTemp=itemTemp.getFirstChild();
               String idTempValue=idTemp.getFirstChild().getNodeValue();
                if(idValue.equals(idTempValue)) return true;
                }
              return false;
            }
          return false;
        }

    除上述方法外,XMLCart还包括将XML字符串由输入时的String转换成XMLDocument的方法parseString,以及用于输出时将XSL赋给myCart并返回String型XML字串的 cartTurnToStringWithXSL方法来辅助购物车主要操作的实现,这里不再赘述。


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    本人只會一點點XML.
    和ASP.以及FLASH.其它都不太懂.

    大家多多指教.

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/2/18 10:09:00
     
     阿星[aXing] 帅哥哟,离线,有人找我吗?水瓶座2004-02-09
      
      
      头衔:重友轻色
      等级:大二(研究C++)
      文章:180
      积分:265
      门派:XML.ORG.CN
      注册:2004/2/16

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给阿星[aXing]发送一个短消息 把阿星[aXing]加入好友 查看阿星[aXing]的个人资料 搜索阿星[aXing]在『 XML源码及示例(仅原创和转载) 』的所有贴子 引用回复这个贴子 回复这个贴子 查看阿星[aXing]的博客2
    发贴心情 
    o

    ----------------------------------------------
    开心需要自已去寻找 而不能渴求别人的施舍 用快乐的心去体会这个世界 一切都会很美好

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/2/24 16:02:00
     
     zhaomeiyan 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:5
      积分:72
      注册:2004/2/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给zhaomeiyan发送一个短消息 把zhaomeiyan加入好友 查看zhaomeiyan的个人资料 搜索zhaomeiyan在『 XML源码及示例(仅原创和转载) 』的所有贴子 引用回复这个贴子 回复这个贴子 查看zhaomeiyan的博客3
    发贴心情 
    大虾,我从来没学过java和xml,也没学过其他的面向对象语言,仅会c++语言,我改怎样才能读懂你的文章呢?请指教,多谢
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/2/24 16:52:00
     
     zhaomeiyan 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:5
      积分:72
      注册:2004/2/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给zhaomeiyan发送一个短消息 把zhaomeiyan加入好友 查看zhaomeiyan的个人资料 搜索zhaomeiyan在『 XML源码及示例(仅原创和转载) 』的所有贴子 引用回复这个贴子 回复这个贴子 查看zhaomeiyan的博客4
    发贴心情 
    恳求您将paseString,cartTurnToStringWithXSL也写出来
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/2/24 16:55:00
     
     yoyo 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:0
      积分:55
      注册:2004/2/26

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给yoyo发送一个短消息 把yoyo加入好友 查看yoyo的个人资料 搜索yoyo在『 XML源码及示例(仅原创和转载) 』的所有贴子 引用回复这个贴子 回复这个贴子 查看yoyo的博客5
    发贴心情 
    写的挺好的,不过我不晓得在购物车的实现中XML的优点在哪儿
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/3/1 15:38:00
     
     diegor 帅哥哟,离线,有人找我吗?白羊座1979-4-10
      
      
      威望:4
      等级:大二(研究C++)|大二(研究汇编)
      文章:266
      积分:806
      门派:XML.ORG.CN
      注册:2004/3/3

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给diegor发送一个短消息 把diegor加入好友 查看diegor的个人资料 搜索diegor在『 XML源码及示例(仅原创和转载) 』的所有贴子 引用回复这个贴子 回复这个贴子 查看diegor的博客6
    发贴心情 
    学学就是好,不管有点还是缺点 :0

    ----------------------------------------------
    坚决支持XML!

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/3/8 17:00:00
     
     hotdog004 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:7
      积分:92
      门派:XML.ORG.CN
      注册:2004/4/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给hotdog004发送一个短消息 把hotdog004加入好友 查看hotdog004的个人资料 搜索hotdog004在『 XML源码及示例(仅原创和转载) 』的所有贴子 引用回复这个贴子 回复这个贴子 查看hotdog004的博客7
    发贴心情 
    看看能不能用到我的论文里。呵呵
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/4/15 20:05:00
     
     guhao510 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:58
      门派:XML.ORG.CN
      注册:2004/6/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给guhao510发送一个短消息 把guhao510加入好友 查看guhao510的个人资料 搜索guhao510在『 XML源码及示例(仅原创和转载) 』的所有贴子 引用回复这个贴子 回复这个贴子 查看guhao510的博客8
    发贴心情 
    我是个大菜鸟!!!怎么把你的代码转化成RDF格式的
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/6/5 14:48:00
     
     xmzhy 帅哥哟,离线,有人找我吗?狮子座1978-8-18
      
      
      威望:5
      等级:计算机学士学位
      文章:385
      积分:2003
      门派:XML.ORG.CN
      注册:2003/10/22

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给xmzhy发送一个短消息 把xmzhy加入好友 查看xmzhy的个人资料 搜索xmzhy在『 XML源码及示例(仅原创和转载) 』的所有贴子 引用回复这个贴子 回复这个贴子 查看xmzhy的博客9
    发贴心情 
    学习
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/11/26 9:33:00
     
     GoogleAdSense狮子座1978-8-18
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XML源码及示例(仅原创和转载) 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/15 19:08:41

    本主题贴数9,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    93.750ms