亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

不規矩的xml與JAVA對象互相轉換的小技巧-使用Marshaller

2019-11-14 21:13:43
字體:
來源:轉載
供稿:網友
不規矩的xmljava對象互相轉換的小技巧-使用Marshaller摘要:將XML文檔與JAVA對象互轉是很常見的需求,如果XML定義很規整這很好實現。然而在現實中“不規矩”的XML可能更常見,Marshaller便無能為力了嗎?下面是一個小技巧,調整一下思維便能重用Marshaller了,征服它們使工作更簡單。關鍵詞:Marshaller, JAVA, XML
將一個類生成一個Json字符串、將一個Json字符串翻譯成一個類(JAVA、C#代碼),這一過程已經在“”博客中描述了;在實際項目應用中,如何將一個類生成一個XML文檔或XML字符串,如何將一個XML文檔翻譯成一個類,這又是經常遇到的問題。比如,跟其它系統的交互中,其它系統定義的接口參數以XML格式定義,那么你寫的系統就要解析并理解它傳入的數據,或者把自己內部的數據轉成按它規定的XML格式文檔傳出。在JAVA里,這一過程還蠻簡單,使用Marshaller便可以很輕松的解決。然而,有一些“不守規矩”的XML格式可能被其它系統定義了,它們定義的XML格式恰恰不是Marshaller天生有能力生成與解析的,我們對這種“不規矩"的XML就無計可施了嗎?其實Marshaller還是很好用的,后來你會發現Marshaller的極限便不復存在。下面,我以一個簡單的例子來證明我的這一觀點,對于“不規矩”的XML我也是有辦法將其制服的。一、XML幫助類首先,你得有一個XML幫助類,它提供的是最基礎的,使用Marshaller使XML和JAVA對象互轉,這對于規矩的XML文檔們,便能以一擋百了。
importjavax.xml.bind.JAXBContext;importjavax.xml.bind.JAXBException;importjavax.xml.bind.Marshaller;importjavax.xml.bind.Unmarshaller;/***XML的幫助類**@authorwanganqi*@versionv1.0*@since2014年8月13日下午2:38:52*/publicclassXmlHelper{/***將自定義數據對象轉化為XML字符串**@paramclazz自定義數據類型*@paramobject自定義數據對象*@returnXML字符串*@throwsJAXBException異常*/publicstaticStringobjectToXML(Classclazz,Objectobject)throwsJAXBException{Stringxml=null;JAXBContextcontext=JAXBContext.newInstance(clazz);Marshallerm=context.createMarshaller();m.setPRoperty(Marshaller.JAXB_FORMATTED_OUTPUT,Boolean.TRUE);Writerw=newStringWriter();m.marshal(object,w);xml=w.toString();returnxml;}/***將XML字符串轉化為自定義數據對象**@paramclazz自定義數據類型*@paramxmlXML字符串*@return自定義數據對象*@throwsJAXBException異常*/publicstaticObjectxmlToObject(Classclazz,Stringxml)throwsJAXBException{JAXBContextcontext=JAXBContext.newInstance(clazz);Unmarshallerum=context.createUnmarshaller();returnum.unmarshal(newStringReader(xml));}}

?這對于這樣規矩的:XML,就要定義這樣的:JAVA類,一一對應,什么事情都能解決。
XML(規矩的)文件格式樣例JAVA生成方法
<?xmlversion="1.0"encoding="UTF-8"?><ANQIFILE><HEAD><ANQINUM>2</ANQINUM><DATETIME>YYYY-MM-DDHH:MM:SS</DATETIME><APPROVALNUM>王安琪No1</APPROVALNUM></HEAD><BODY><ANQI>00001</ANQI><ANQI>00002</ANQI><ANQI>00003</ANQI></BODY></ANQIFILE>ANQIHeadhead=newANQIHead(1,"YYYY-MM-DDHH:MM:SS","王安琪No1");ANQIBodybody=newANQIBody("00001", "00002", "00003");ANQIFile anqiFile=newANQIFile(head,body);Stringxml=XmlHelper.objectToXML(ANQIFile.class,anqiFile);補充說明:下面的構造函數都隱去了,使用String... anqis類似的參數,使用時請不要疑惑。
@XmlRootElement(name="ANQIFILE")@XmlType(propOrder={"head","body"})publicclassANQIFile{privateANQIHeadhead;privateANQIBodybody;@XmlElement(name="HEAD")publicANQIHeadgetHead(){returnhead;}publicvoidsetHead(ANQIHead head){this.head=head;}@XmlElement(name="BODY")publicANQIBody getBody(){returnbody;}publicvoidsetBody(ANQIBody body){this.body=body;}}-------------------------------------------------------------------------------------publicclassANQIBody{privateList<String>anqi;@XmlElement(name="ANQI")publicList<String>getAnqi(){returnanqi;}publicvoidsetAnqi(List<String>anqi){this.anqi= anqi;}}@XmlType(propOrder={"anqiNum","dateTime","appovalNum"})publicclassANQIHead{privateintanqiNum;privateStringdateTime;privateStringappovalNum;@XmlElement(name="ANQINUM")publicintgetAnqiNum(){returnclueNum;}publicvoidsetAnqiNum(intclueNum){this.clueNum=clueNum;}@XmlElement(name="DATETIME")publicStringgetDateTime(){returndateTime;}publicvoidsetDateTime(StringdateTime){this.dateTime=dateTime;}@XmlElement(name="APPROVALNUM")publicStringgetAppovalNum(){returnappovalNum;}publicvoidsetAppovalNum(StringappovalNum){this.appovalNum=appovalNum;}}補充說明:這里的構造函數都隱去了,使用String... anqis類似的參數,使用時請不要疑惑。
二、將 自定義數據對象 與 XML(不規矩的)字符串 互轉現在我們有一個需求,把我們系統的JAVA對象轉成按其它系統規定的XML格式文檔傳出,其它系統給了我們一份XML格式文檔,希望我們能正確構造它;我寫的系統要解析并理解其它系統傳入的XML數據,同樣的其它系統給了我們一份XML格式文檔,希望我們能順利解釋它??纯次覀兪窃趺醋龅陌伞ML格式:
XML(不規矩的)文件格式樣例JAVA使用方法 及 JAVA類
<?xmlversion="1.0"encoding="UTF-8"?><ANGELFILE><ANGEL><WANGID="00001"COUNT="2"><ANQI><ITEM1>VALUE</ITEM1><ITEM2>VALUE</ITEM2><ITEMN>VALUE</ITEMN></ANQI><ANQI><ITEM1>VALUE</ITEM1><ITEM2>VALUE</ITEM2><ITEMN>VALUE</ITEMN></ANQI></WANG></ANGEL></ANGELFILE>可以使用與上面規矩的XML類似的JAVA定義、使用方法?,F在看看它有多不規矩(其實也不是很不規矩啦,只是在ANQI這個節點下面的子節點名字每個都不一樣,但都是以ITEM開頭的)。要生成這樣的XML,可以先用ObjectToXML()生成都是以 ITEM 命名的節點,再通過DOM讀取并更新ITEM名稱,后面加上1、2...要解析這樣的XML,可以先把此XML過濾一遍,把ITEM*樣的節點名稱更新為 ITEM,再用XMLToObject()生成對象。
三、遇到的問題及改進方法1、在使用Marshaller的過程中,出現了一點問題:生成XML時,并不按照配置的@XmlType(propOrder={"1","2"})的順序,而是恰好相反的,這個問題目前還沒有解決,唯一在網上查到的相關信息是說JAVA版本為6以下的會有這個BUG,但是我的JAVA版本為1.7,也出現了這個問題,望有知道解決方法的同學告知一下,請不吝賜教。

2、對于不規矩的XML格式,更好的辦法是使用Marshaller所支持的自定義解析器,上面的不規矩XML完全可以映射到Map對象上面去。這種方法更能支持更不規則的XML定義。網上不知有無已經實現的代碼,知道的同學,請不吝賜教。

最近項目工作量很大,每天都能學習到很多東西,項目管理的、JAVA使用的、界面規范的......不勝枚舉,畢竟是第一次自己負責的項目,經驗和教訓肯定的巨大的。

作為一個項目經理,對作品、對自己的團隊都覺得立馬有了深深的責任感,也有了很大的壓力,感謝組織的信任與支持,感謝團隊的鼎力協作,感謝相關部門的大力配合,感謝姚老師的無私幫助,也感謝老婆默默的支持。

ありがとうございます 

如何集中資源做成一個優秀的項目,如何擔當得起自己的責任,如何與各類角色溝通,真是任重而道遠。

來自王安琪


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产大片精品免费永久看nba| 欧美中文在线字幕| 中文字幕精品视频| 欧美理论电影网| 欧美成人自拍视频| 国产精品女视频| 成人亲热视频网站| 成人免费自拍视频| 亚洲国产高清自拍| 欧美另类精品xxxx孕妇| 精品日本美女福利在线观看| 欧美黄色三级网站| 精品亚洲永久免费精品| 91天堂在线观看| 亚洲精品综合精品自拍| 精品久久久久久久久久国产| 欧美激情精品久久久久久久变态| 成人亚洲欧美一区二区三区| 亚洲成人久久电影| 亚洲一区二区三区777| 97在线免费视频| 91免费人成网站在线观看18| 欧美电影免费观看高清完整| 国产成人精品免费视频| www.美女亚洲精品| 爽爽爽爽爽爽爽成人免费观看| 九九热这里只有精品6| 欧美床上激情在线观看| 岛国av一区二区在线在线观看| 深夜福利一区二区| 国产精品99久久久久久白浆小说| 日韩av免费在线| 青青a在线精品免费观看| 91精品视频大全| 国产成人综合久久| 最近2019年中文视频免费在线观看| 九九热这里只有精品6| 91成人在线播放| 欧美xxxx18国产| 成人激情在线播放| 日韩欧美国产激情| 日韩在线视频导航| 成人在线中文字幕| 亚洲精选一区二区| 91精品在线国产| 欧美在线视频观看免费网站| 亚洲美女av在线| 午夜精品久久久久久久99热浪潮| 97国产精品久久| 欧美在线中文字幕| 一区二区三区亚洲| 欧美高清第一页| 91精品中文在线| 日韩国产一区三区| 91免费精品国偷自产在线| 亚洲国产成人精品久久久国产成人一区| 久久精品91久久久久久再现| 91在线免费观看网站| 国产999精品久久久影片官网| 亚洲人成在线观看网站高清| 国产精品美女主播| 亚洲女人初尝黑人巨大| 色综合天天综合网国产成人网| 久久久噜噜噜久久久| 成人精品一区二区三区电影黑人| 久久免费视频观看| 国产一区香蕉久久| 91精品久久久久久久久不口人| 亚洲欧洲一区二区三区久久| 精品亚洲一区二区三区在线观看| 97**国产露脸精品国产| 国产深夜精品福利| 亚洲成人国产精品| 91精品综合视频| 国产精品视频自拍| 亚洲精品999| 91精品国产91久久久久| 日韩在线播放av| 欧美国产日韩一区二区在线观看| 国产精品v片在线观看不卡| 国产精品欧美在线| 亚洲xxxx视频| 欧洲午夜精品久久久| 欧美精品激情blacked18| 亚洲第一网中文字幕| 伊人青青综合网站| 亚洲黄色av网站| 国产精品综合不卡av| 欧美成人精品在线观看| 日韩一区av在线| 亚洲成色777777在线观看影院| 久久精品最新地址| 在线视频欧美日韩精品| 国产精品久久久久久久久久三级| 欧美日韩在线视频一区二区| 亚洲综合在线播放| 欧美日韩国产精品一区二区三区四区| 欧美日韩免费区域视频在线观看| 91亚洲精华国产精华| 日日骚久久av| 亚洲a∨日韩av高清在线观看| 青青在线视频一区二区三区| 91av网站在线播放| 欧美高跟鞋交xxxxhd| xxxxx成人.com| 亚洲精品www| 久久久久日韩精品久久久男男| 亚洲黄色www| 国产精品成人一区| 久久综合久久88| 成人乱色短篇合集| 久久九九国产精品怡红院| 欧美日韩一二三四五区| 国产精品视频久久久| www高清在线视频日韩欧美| 欧美日韩综合视频网址| 亚洲影视中文字幕| 亚洲国产一区二区三区在线观看| 精品美女永久免费视频| 色与欲影视天天看综合网| 欧美综合激情网| 中文字幕免费精品一区高清| 国产成人一区二区三区电影| 日韩成人久久久| 国产99久久精品一区二区| 91亚洲国产精品| 91av视频在线观看| 91精品国产91久久久久久不卡| 成人午夜在线视频一区| 久久成人人人人精品欧| 亚洲欧美一区二区三区在线| 亚洲欧美日韩高清| 亚洲a成v人在线观看| 国产精品爱啪在线线免费观看| 91精品国产综合久久男男| 97精品国产97久久久久久免费| 性欧美长视频免费观看不卡| 亚洲在线观看视频网站| 日韩av中文字幕在线| 2019亚洲男人天堂| 中文字幕亚洲无线码在线一区| 国产欧美韩国高清| 成人激情视频在线| 欧美日韩国产区| 成人激情电影一区二区| 欧美极品美女视频网站在线观看免费| 欧美乱人伦中文字幕在线| www亚洲精品| 亚洲欧美自拍一区| 91欧美精品成人综合在线观看| 国产精品观看在线亚洲人成网| 亚洲国产成人精品久久| 欧美成人精品xxx| 亚洲一二在线观看| 久久久久久一区二区三区| 欧美人与性动交| 国产精品揄拍一区二区| 国产精品入口日韩视频大尺度| 伊人亚洲福利一区二区三区| 亚洲黄一区二区| 国产在线拍偷自揄拍精品| 国产精品永久免费视频| 欧美精品videofree1080p| 欧美精品一区二区三区国产精品|