基于xml的购物车的实现
购物车是网站不可缺少的一部分,但现在大部分购物车只作为客户选择的商品展示,购物车的内容无法提取,以满足他们的交易需求,但这一点在一些活动中是非常必要的,XML的出现使得网络上的数据传输变得有意义。我们可以根据不同的需求显示不同款式的购物车的内容。本文将给出一个详细的分析基于XML的购物车用java实现。下面是一个包含五个项目的购物车XML的内部结构:它的根元素是车,总元素代表的购物车总金额,每一项元素代表项商品的子元素都有货物的具体信息,可以添加、修改或删除根据实际情况。
在这里,你需要建立一个类,代表了一个购物车:xmlcart.java,这是一个JavaBean,所以它包含一个空的构造函数,该类包含了购物车的一些基本功能:生成一个空的购物车,添加商品到购物车,在购物车中删除商品、购物车商品的数量变化,和清空购物车。它有一个全球性的私有变量XmlDocument mycart,mycart用于存储内容的购物车,购物车的基本功能是它的操作,它的类型是XML文档,这是一个XML文件,这样,对购物车的操作转换在mycart子元素的添加和删除,以及计算和修改元素值的阳离子。
1。清空购物车
空购物车是一个空的购物车。在这里,空购物车是一个XML文档,包含根元素购物车及其元素总数。总元素是购物车的总金额,其初始值为0,其XML表单如下所示。
零
将XML字符串从parsestring功能到XmlDocument和存款到mycart。
代码如下:
公共无效emptycart()抛出IOException,saxexception {
字符串+ stringcart =
0;
mycart = parsestring(stringcart);
}
2。添加商品
添加一个产品,将传入的项目元素添加到根元素购物车中,
该项目包括货物的详细资料,
同时计算总价值:
public void addItemToCart(字符串StringItem)
抛出IOException,saxexception {
项目 / /转换成字符串
XmlDocument itemadded = parsestring(StringItem);
删除项目节点并复制它
列表项列表= itemadded.getelementsbytagname(项目);
结项= itemlist.item(0);
结cloneitem = item.clonenode(真的);
如果购物车是空的,它构建一个新的购物车。
如果(iscartempty()){
MyCart.emptyCart();
}
如果货物不在购物车中,则插入货物,并计算总金额。
如果(!isitemexist(项目,mycart)){
的mycart /根元素,和项目节点添加到复制的背后
元cartroot = mycart.getdocumentelement();
结cartnode = cartroot.appendchild(cloneitem);
(computetotal); / /计算总金额
}
}
三.删除商品
根据商品代码,将产品的项目内容删除。
从购物车删除的mycart根元素,
重新计算总价值:
公共无效moveitemfromcart(字符串ID){
以 / /项目为单元节点集cartlist和根元素cartroot
cartlist = mycart.getelementsbytagname列表(项目);
元cartroot = mycart.getdocumentelement();
/ /在cartlist搜索代码为选定的ID货物
为(int x = 0;X结itemnode = cartlist.item(X);
弦择= itemnode.getfirstchild()。
getFirstChild()GetNodeValue();
/ /如果发现,节点从cartroot删除,并退出循环
如果(idvalue.equals(ID)){
itemnode = cartroot.removechild(itemnode);
打破;
}
}
(computetotal); / /计算总金额
}
4。改变货物数量
基于网页上的客户数量mycart修改数量。
并重新计算总:
公共无效addquantitytocart(字符串qnty)投
一次,saxexception {
一组XML字符串号包含货物传递到XML文档中。
XmlDocument quantitychanged = parsestring(qnty);
带 / /数量包含新的节点集和mycart集数量的节点
列表quantitylist = quantitychanged.getelementsbytagname(数量);
列表cartlist = mycart.getelementsbytagname(数量);
流通货物数量
为(int x = 0;X / /)分配新的量值在mycart相应数量的
串量= quantitylist.item(X),GetFirstChild()GetNodeValue();
CartList.item(X),GetFirstChild()SetNodeValue(量);
}
(computetotal); / /计算总金额
}
5。总金额的计算
也就是说,总价值的计算,其中总=西格玛(价格*数量):
公共无效computetotal(){
列表quantitylist = mycart.getelementsbytagname(数量);
列表价格= mycart.getelementsbytagname(价格);
浮点总数= 0;
累计累计金额
为(int x = 0;X浮量= Float.parseFloat(quantitylist.item(x))
。getFirstChild()GetNodeValue()));
浮动价格= float.parsefloat(pricelist.item(X),GetFirstChild()GetNodeValue()));
总=总量+数量*价格;
}
总附mycart /总
字符串totalstring = string.valueof(总);
MyCart.getElementsByTagName(总)。
项目(0),GetFirstChild()SetNodeValue(totalstring);
}
6。判断购物车是否空
当添加新的商品时,您需要知道购物车是否是空的,
如果它是空的,就会生成一个新的购物车。
市民Boolean isCartEmpty(){
项目的节点集,如果节点集包含0个节点,则购物车中没有商品,返回true。
列表项列表= mycart.getelementsbytagname(项目);
如果(itemlist.getlength()= = 0)返回true;
否则返回false;
}
7。确定所选货物是否在购物车内。
法官就是否项目存在的mycart如果存在,返回true。
公共布尔isitemexist(结项,成车){
列表项列表= cart.getelementsbytagname(项目);
节点ID = item.getfirstchild();
弦择= id.getfirstchild()GetNodeValue();
如果(itemlist.getlength()!= 0){
为(int x = 0;X结itemtemp = itemlist.item(X);
7node idtemp = itemtemp.getfirstchild();
字符串idtempvalue = idtemp.getfirstchild()GetNodeValue();
如果(idvalue.equals(idtempvalue))返回true;
}
返回false;
}
返回false;
}
除了上述方法,该xmlcart还包括字符串parsestring XmlDocument方法将XML字符串的输入,cartturntostringwithxsl方法和XSL输出分配给mycart并返回字符串类型的XML字符串到购物车的主要操作,这里不再。