ショッピング カートは電子商取引 Web サイトに不可欠な部分ですが、現在、ほとんどのショッピング カートは顧客が選択した商品の表示としてのみ使用でき、クライアントは自身の取引に応じてショッピング カートの内容を抽出することができません。処理ニーズ、およびこれは一部の電子商取引活動で必要です。 XML の登場により、ネットワーク上で送信されるデータが意味のあるものになり、さまざまな要件に応じてショッピング カートの内容をさまざまなスタイルで表示できるようになります。
この記事では、Java で実装された XML ベースのショッピング カートを詳細に分析します。以下は、5 つのアイテムを含むショッピング カートの XML 内部構造です。ルート要素はカート、total 要素はショッピング カート内の合計金額を表し、各 item 要素は製品を表し、アイテム内のサブ要素はマークされています。実際の状況に応じて、製品の固有情報を追加、変更、または削除できます。
ここでは、ショッピング カートを表すクラス XMLCart.java を作成する必要があります。これは JavaBean であるため、空のコンストラクターが含まれています。このクラスには、ショッピング カートのいくつかの基本機能が含まれています。空のショッピング カートの生成、ショッピング カートへの商品の追加、ショッピング カート内の商品の削除、ショッピング カート内の商品数の変更、ショッピング カートのクリアなどです。グローバルプライベート変数「PRivate XMLDocument myCart」は、ショッピング カートの詳細な内容を格納するために使用されます。その型は XML ドキュメントです。このようにして、ショッピングカートの操作は、myCart内の子要素の追加と削除、要素の値の計算と変更に変換されます。
1. ショッピング カートをクリアする
ショッピング カートをクリアすると、空のショッピング カートが生成されます。ここでの空のショッピング カートは、ルート要素の cart とその要素 total を含む XML ドキュメントであり、その初期値は 0 です。その具体的な XML 形式は次のとおりです。 string は parseString です。関数はそれを XMLDocument に変換し、myCart に保存します。
コードは次のとおりです:< ?xml version=‘1.0’ encoding=‘gb2312’?> < cart> < total>0< /total> < /cart>
、アイテムには製品の詳細が含まれており、同時に合計値を計算します。コードは以下の通りです:
public void emptyCart() throws IOException,SAXException{ String stringCart=“< ?xml version=‘1.0’encoding=‘gb2312’?> ”+ “< cart>< total>0< /total>< /cart>”; myCart=parseString(stringCart); }
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(); //计算总金额 } }
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(); //计算总金额 }
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(); //计算总金额 }
6の合計の値を計算することを意味します。 ショッピング カートが空かどうかを確認します
通常、新しい商品を追加するときは、ショッピング カートが空かどうかも確認する必要があります
ショッピング カートが空の場合は、新しいショッピング カートを生成する必要があります。
れぇ
7. 選択した商品が既にショッピングカートに入っているかどうかを判定します
つまり、新しく転送された商品の項目が既にmyCartに存在するかどうかを判定します。存在する場合はtrueを返します。
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); }
上記のメソッドに加えて、XMLCart には、入力時に XML 文字列を String から XMLDocument に変換するメソッド parseString と、myCart に XSL を割り当て、入力時に String 型の XML 文字列を返すために使用される cartTurnToStringWithXSL メソッドも含まれています。ショッピング カートの主な操作の実装については、ここでは説明しません。
上記は、XML ベースのショッピング カートのサンプル コードの詳細です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。