春風博客

          春天里,百花香...

          導航

          <2007年9月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          統計

          公告

          MAIL: junglesong@gmail.com
          MSN: junglesong_5@hotmail.com

          Locations of visitors to this page

          常用鏈接

          留言簿(11)

          隨筆分類(224)

          隨筆檔案(126)

          個人軟件下載

          我的其它博客

          我的鄰居們

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          Ajax程序中,ResponseXml輸出之改進(利用dom4j)

          一般來說,Ajax程序中,ResponseXml輸出一般使用XML拼接,舉例如下:
          PrintWriter out = response.getWriter();

          out.println(
          "<response>");        
          List
          <InOutType> types = service.search(predicate);
          out.println(
          "<status>passed</status>");
          out.println(
          "<message>查詢出的記錄數為:" + types.size() + "條</message>");
          for (InOutType typeTmp : types) {
              out.println(
          "<type>");
              out.println(
          "<name>" + typeTmp.getName() + "</name>");
              out.println(
          "</type>");
          }

          out.println(
          "</response>");

          個人認為這樣的方式用在小規模(編輯器一屏之內)ResponseXml還行,大規模就容易出錯了,它有以下缺點:
          1.節點開始如<response>和節點結束</response>必須成對書寫,容易遺忘出錯.
          2.節點和子節點關系不清晰.

          我設想用dom4j來解決這個問題,具體就是把上述代碼中的XML轉化成一個Document的節點,這樣成對書寫問題和節點關系的問題都能解決了.

          具體的類如下:
          package com.sitinspring.nnyy.util;

          import org.dom4j.Document;
          import org.dom4j.DocumentHelper;
          import org.dom4j.Element;

          public class XmlAssemble{
              
          private Document document;
              
          private Element root;
              
              
          public XmlAssemble(String rootName){
                  document
          =DocumentHelper.createDocument();
                  root 
          = document.addElement(rootName);
              }

              
              
          public String getXml(){
                  
          return document.asXML();
              }

              
              
          public Element add(String elmName){
                  
          return root.addElement(elmName);
              }

              
              
          public Element add(String elmName,String elmTxt){
                  Element elm
          =root.addElement(elmName);
                  elm.setText(elmTxt);
                  
          return elm;
              }


              
          public Element getRoot() {
                  
          return root;
              }

          }


          在這個類的幫助下,原有代碼改寫為:
          List<InOutType> types = service.search(predicate);
          XmlAssemble xmlAssemble
          =new XmlAssemble("response");
          xmlAssemble.add(
          "status","passed");
          xmlAssemble.add(
          "message","查詢出的記錄數為:"+ types.size() + "");
          for (InOutType typeTmp : types) {
              Element typeElm
          =xmlAssemble.add("type");
              Element nameElm
          =typeElm.addElement("name");
              nameElm.setText(typeTmp.getName());
          }

          PrintWriter out 
          = response.getWriter();        
          out.println(xmlAssemble.getXml());    

          明顯,上述代碼沒有書寫問題和節點關系問題,它的書寫過程是逐漸深入子節點的,代碼連貫性好多了,即使代碼超過一屏也能有效控制.

          以上.

          posted on 2007-09-27 12:58 sitinspring 閱讀(1929) 評論(2)  編輯  收藏 所屬分類: Ajax

          評論

          # re: Ajax程序中,ResponseXml輸出之改進(利用dom4j) 2007-09-27 15:39 just as yeti

          恩 挺好 ,這樣編碼是個很好的方式 學習  回復  更多評論   

          # re: Ajax程序中,ResponseXml輸出之改進(利用dom4j) 2008-08-27 15:28 ssssss

          效率如何呢  回復  更多評論   

          sitinspring(http://www.aygfsteel.com)原創,轉載請注明出處.
          主站蜘蛛池模板: 资兴市| 洞口县| 吉木乃县| 什邡市| 凌云县| 博爱县| 盐山县| 东光县| 长岭县| 凤台县| 都昌县| 泾源县| 喜德县| 华坪县| 济源市| 县级市| 荔浦县| 邵阳县| 大丰市| 嘉义市| 九龙坡区| 高唐县| 怀安县| 西昌市| 宿松县| 凤山市| 禹州市| 甘泉县| 吴江市| 裕民县| 扎赉特旗| 宜良县| 马边| 固阳县| 招远市| 汉寿县| 平利县| 措美县| 龙江县| 桑植县| 高唐县|