熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

用Java實現基於XML的購物車

2022-06-13   來源: Java核心技術 

  購物車是電子商務網站中不可缺少的組成部分但目前大多數購物車只能作為一個顧客選中商品的展示客戶端無法將購物車裡的內容提取出來滿足自己事務處理的需要而這一點在有些電子商務活動中很有必要XML的出現使得網絡上傳輸的數據變得有意義起來我們可以根據不同的要求以不同的樣式將一個購物車的內容顯示出來

  本文將詳細分析一個由Java實現的基於XML的購物車下面是一個包含了五件商品的購物車的XML內在結構它的根元素為carttotal元素表示購物車內的總金額每個item元素表示一件商品item裡的子元素分別標明了該商品的具體信息可根據實際情況添加修改或刪除

  在這裡需要建立一個表示購物車的類XMLCartjava它是一個JavaBean所以它包含了一個空的構造函數這個類包含了購物車的一些基本功能 生成一個空的購物車往購物車裡添加商品刪除購物車裡的商品改變購物車內商品的數量以及清空購物車等它擁有一個全局私有變量private XMLDocument myCartmyCart用來存儲購物車裡的詳細內容購物車的基本功能就是對它的操作它的類型是XMLDocument即一個XML文檔這樣對購物車的操作就轉換成對myCart中的子元素的添加刪除及元素值的計算修改等

  清空購物車

  清空購物車即生成一個空的購物車這裡空購物車是一個含有根元素cart及其元素total的XML文檔total元素是購物車的總金額它的初始值為其XML具體形式如下

  < ?xml version= encoding=gb?>

  < cart>

  < total>< /total>

  < /cart>

  將這個XML字符串由parseString函數轉換成XMLDocument存入myCart

  其代碼如下

  public void emptyCart() throws IOExceptionSAXException{

  String stringCart=< ?xml version=encoding=gb?> +

  < cart>< total>< /total>< /cart>;

  myCart=parseString(stringCart)

  }

  添加商品

  添加商品即將傳入的item元素添加到根元素cart裡其中item裡包括商品詳細信息同時計算total的值其代碼如下

  public void addItemToCart(String stringItem)

  throws IOExceptionSAXException{

  //將item由String轉換為XMLDocument

  XMLDocument itemAdded=parseString(stringItem)

  //取出item節點並復制它

  NodeList itemList=itemAddedgetElementsByTagName(item

  Node item=em(

  Node cloneItem=itemcloneNode(true)

  //如果購物車為空則構造一個新的購物車

  if(isCartEmpty()){

  myCartemptyCart()

  }

  //如果該商品不在購物車中則插入該商品並計算總金額

  if(!isItemExist(itemmyCart)){

  //取myCart的根元素並將復制的item節點添加到後面

  Element cartRoot=myCartgetDocumentElement()

  Node cartNode=cartRootappendChild(cloneItem)

  computeTotal() //計算總金額

  }

  }

  刪除商品

  刪除商品即根據商品代碼將該商品的item元素從myCart的根元素cart中刪除並重新計算total的值

  public void moveItemFromCart(String id){

  //取出以item為單位的節點集cartList以及根元素cartRoot

  NodeList cartList=myCartgetElementsByTagName(item

  Element cartRoot=myCartgetDocumentElement()

  //在cartList中查找代碼為選中id的商品

  for(int x=;x< cartListgetLength()x++){

  Node itemNode=em(x)

  String idValue=itemNodegetFirstChild()

  getFirstChild()getNodeValue()

  //如果找到則從cartRoot中刪除該節點並跳出循環

  if(idValueequals(id)){

  itemNode=cartRootremoveChild(itemNode)

  break;

  }

  }

  computeTotal() //計算總金額

  }

  改變商品數量

  根據客戶在頁面上所填的數量修改myCart中quantity並重新計算total:

  public void addQuantityToCart(String qnty) throws

  IOExceptionSAXException{

  //將傳過來的包含商品數量的一組XML字符串轉換為XML文檔

  XMLDocument quantityChanged=parseString(qnty)

  //取出包含新數量的quantity節點集和myCart中的quantity節點集

  NodeList quantityList=quantityChangedgetElementsByTagName(quantity

  NodeList cartList=myCartgetElementsByTagName(quantity

  //循環改變商品的數量

  for(int x=;x< cartListgetLength()x++){

  //將新quantity的值賦給myCart中相應的quantity中去

  String quantity=em(x)getFirstChild()getNodeValue()

  em(x)getFirstChild()setNodeValue(quantity)

  }

  computeTotal() //計算總金額

  }

  計算總金額

  即計算total的值其中total=∑(price*quantity)

  public void computeTotal(){

  NodeList quantityList=myCartgetElementsByTagName(quantity

  NodeList priceList=myCartgetElementsByTagName(price

  float total=;

  //累加總金額

  for(int x=;x< priceListgetLength()x++){

  float quantity=FloatparseFloat(em(x)getFirstChild()getNodeValue())

  float price=FloatparseFloat(em(x)getFirstChild()getNodeValue())

  total=total+quantity*price;

  }

  //將total附給myCart的total

  String totalString=StringvalueOf(total)

  myCartgetElementsByTagName(total

  item(getFirstChild()setNodeValue(totalString)

  }

  判斷購物車是否為空

  通常在添加新商品時還需要知道購物車是否為空如果為空的話則要生成一個新的購物車

  public boolean isCartEmpty(){

  //item的節點集如果該節點集包含的節點數為則購物車內沒有商品返回true

  NodeList itemList=myCartgetElementsByTagName(item

  if(itemListgetLength()==) return true;

  else return false;

  }

  判斷所選商品是否已在購物車內

  即判斷新傳來商品的item是否已在myCart中存在如果存在返回true

  public boolean isItemExist(Node item XMLDocument cart){

  NodeList itemList=cartgetElementsByTagName(item

  Node id=itemgetFirstChild()

  String idValue=idgetFirstChild()getNodeValue()

  if(itemListgetLength()!=){

  for(int x=;x< itemListgetLength()x++){

  Node itemTemp = em(x)

  Node idTemp=itemTempgetFirstChild()

  String idTempValue=idTempgetFirstChild()getNodeValue()

  if(idValueequals(idTempValue)) return true;

  }

  return false;

  }

  return false;

  }

  除上述方法外XMLCart還包括將XML字符串由輸入時的String轉換成XMLDocument的方法parseString以及用於輸出時將XSL賦給myCart並返回String型XML字串的 cartTurnToStringWithXSL方法來輔助購物車主要操作的實現


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26148.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.