分享
 
 
 

基于XML的购物车的实现

王朝other·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

购物车是电子商务网站中不可缺少的组成部分,但目前大多数购物车只能作为一个顾客选中商品的展示,客户端无法将购物车里的内容提取出来满足自己事务处理的需要,而这一点在有些电子商务活动中很有必要。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方法来辅助购物车主要操作的实现,这里不再赘述。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有