posts - 43,comments - 75,trackbacks - 0

                 一:xmlBean對開發(fā)人員來說是比較好的,因為它大大減少開發(fā)人員的代碼量,但是也有一些不足之處。下面我們細細說來:
                 二: xmlBean 從名字大家一般都能看出來,就是對xml文件的操作轉(zhuǎn)換成javaBean的方式進行操作。
                  
                 三: 首先:在項目中我們一般都是先定義出xml文件的一個樣例,確定大家交換數(shù)據(jù)的xml格式,例如以下xml文件的樣式
                       <?xml version="1.0" encoding="UTF-8"?>
                 <EBApp>
                  <Head>
                   <TaskID>dfjdk</TaskID>
                   <DealCode>dfjd</DealCode>
                   <DealContent>dfjdk</DealContent>
                  </Head>
                  <Body>
                   <BatchNo>dfj</BatchNo>
                   <BillNo>dfj</BillNo>
                   <AccountResult>dfjdkfj</AccountResult>
                  </Body>
                 </EBApp>
                     
                  四:xml文件確定下來之后,然后就是對xml的解析,創(chuàng)建操作。在這里我們使用xmlBean對xml文件進行操作。
                  首先下載xmlBean(去google搜索,就知道到哪里下載了),下載之后解壓到任意目錄,
                  在“我的計算機”--“高級”--“環(huán)境變量” 中配置XMLBEANS_HOME 指向你解壓的目錄。
                    在PATH中 配置%XMLBEANS_HOME%\bin ,這樣xmlBean 的環(huán)境配置好了
                 
                 五: xmlBean需要xml文件的xsd。使用xmlSpy生成對應(yīng)xml文件的xsd文件
                  cmsQueryDiscRele.xsd 內(nèi)容如下:
                  <?xml version="1.0" encoding="UTF-8"?>
               <xs:schema elementFormDefault="qualified" targetNamespace="http://hermes.abc.com/elecbill/cms/discRele" xmlns:xs="http://www.w3.org/2001/XMLSchema">
                <xs:element name="EBApp">
                 <xs:complexType>
                  <xs:sequence>
                   <xs:element name="Head">
                    <xs:complexType>
                     <xs:sequence>
                      <xs:element name="TaskID" type="xs:string"/>
                      <xs:element name="DealCode" type="xs:string"/>
                      <xs:element name="DealContent" type="xs:string"/>
                     </xs:sequence>
                    </xs:complexType>
                   </xs:element>
                   <xs:element name="Body">
                    <xs:complexType>
                     <xs:sequence>
                      <xs:element name="BatchNo" type="xs:string"/>
                      <xs:element name="BillNo" type="xs:string"/>
                      <xs:element name="AccountResult" type="xs:string"/>
                     </xs:sequence>
                    </xs:complexType>
                   </xs:element>
                  </xs:sequence>
                 </xs:complexType>
                </xs:element>
               </xs:schema>
                “targetNamespace”,“elementFormDefault”這兩個attribute必須存在。并且elementFormDefault為qualified
                為什么要使用targetNamespace在后面將講到。
                
                六:有xsd文件之后就可以使用xmlBean工具了,將cmsQueryDiscRele.xsd放到d盤下(你可以自己放置到任意目錄下)
               
                在命令行中輸入 cd 到 d:\ 下
                然后 scomp -src build\src  -out build\her.jar cmsQueryDiscRele.xsd
                       -compiler D:\Java\jdk1.5\bin\javac
               這樣就生成her.jar文件了,her.jar就是對上面xml文件的javaBean映射了
              
               七:解析范例:
               EBAppDocument ad = EBAppDocument.Factory.parse(message);
                ad.getEBApp().getHead().getTaskID();
                ad.getEBApp().getHead().getDealCode());
                ad.getEBApp().getHead().getDealContent();
                ad.getEBApp().getBody().getBatchNo();
                ad.getEBApp().getBody().getBillNo();
               
                八:生成xml范例:
                 EBAppDocument ebappd = EBAppDocument.Factory.newInstance();
                 EBAppDocument.EBApp ebapp = ebappd.addNewEBApp();
                 EBAppDocument.EBApp.Head head = ebapp.addNewHead();
                 head.setTaskID("");
                 head.setDealCode("");
                 head.setDealContent("");
                 EBAppDocument.EBApp.Body body = ebapp.addNewBody();
                 body.setBatchNo("");
                 body.setAccountResult("");
                 body.setBillNo("");
                 ebappd.xmlText();
                 
                 九:現(xiàn)在講講為什么要使用targetNamespace:在項目中我們定義的xml文件不可能就一種格式,
                 而xmlBean將 xml文件映射到j(luò)avaBean時,xml根節(jié)點就是Bean中最外層的Bean名稱,例如上面的xml文件
                 根節(jié)點為 <EBApp>,對應(yīng)的為EBAppDocument 。而同一個項目的根節(jié)點一般都相同,只是里面的子節(jié)點在不
                 斷的發(fā)生變化。那么如果沒有targetNamespace attribute,生成的EBAppDocument 就會重復(fù),所以我們只有
                 通過包名進行分類了,例如 a包下的EBAppDocument,b包下的EBAppDocument,targetNamespace就是生成包名結(jié)構(gòu)。
                 
                 十:另外在使用生成的EBAppDocument.Factory.parse,進行解析xml文件時,如果傳過來的xml文件中沒有xmlns
                 attribute ,則解析也會有問題,不過xmlBean考慮了這個問題,可以使用如下操作
                 XmlOptions op = new XmlOptions();
                  Map map = new HashMap();
                  map.put("", "http://hermes.abc.com/elecbill/cms/");
                  map.put(oldNameSpace, nameSpace);
                  op.setLoadSubstituteNamespaces(map);
                 EBAppDocument.Factory.parse(XmlOptions op),
                 這樣解析就沒問題了。
                
                 十一:另外在生成xml時,由于存在targetNamespace,生成的xml文件每個elements開頭都有一個 "cms:", 這是
                 targetNamespace 的縮寫,是取你targetNamespace的最后字符,如果想去掉這給可是使用xmlBean的方法
                  XmlOptions op = new XmlOptions();
                  op.setUseDefaultNamespace();
                  ebappd.xmlText(op);
                  這樣就可以了。

                  十二:未解決問題、當(dāng)你在xsd中指定targetNamespace時,在使用xmlBean生成的xml文件中會發(fā)現(xiàn)多了
                 一個 xmlns="http://hermes.abc.com/elecbill/cms/" attribute,而且這個attribute怎么也沒有辦法去掉
                 (本人現(xiàn)在是沒辦法,如果有人知道,可以交流一下)。
          posted on 2010-01-18 16:15 夢源 閱讀(3701) 評論(4)  編輯  收藏

          FeedBack:
          # re: xmlBean 使用心得
          2010-01-18 20:49 | 咖啡妝
          建議用另外一款gastor 但是感覺這種工具不是很有必要 完全用dom解析也不錯 呵呵  回復(fù)  更多評論
            
          # re: xmlBean 使用心得
          2010-01-20 18:26 | 來如風(fēng)
          xstream thoughtworks 出品  回復(fù)  更多評論
            
          # re: xmlBean 使用心得[未登錄]
          2010-08-03 16:56 | 5566
          很好 學(xué)習(xí)了  回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 永平县| 永和县| 苏州市| 蒙山县| 顺昌县| 浦北县| 玛纳斯县| 肃宁县| 遵化市| 仁布县| 东莞市| 新密市| 汉川市| 连江县| 巴彦淖尔市| 丰台区| 淮滨县| 新沂市| 绥阳县| 胶州市| 灵川县| 长治市| 渑池县| 昆明市| 托克逊县| 太谷县| 永顺县| 北川| 东丰县| 安乡县| 江津市| 会东县| 岳池县| 沾益县| 江达县| 武定县| 渝北区| 湖北省| 兖州市| 宝山区| 昭苏县|