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生成方法 |
<?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使用方法 及 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()生成對象。 |
2、對于不規矩的XML格式,更好的辦法是使用Marshaller所支持的自定義解析器,上面的不規矩XML完全可以映射到Map對象上面去。這種方法更能支持更不規則的XML定義。網上不知有無已經實現的代碼,知道的同學,請不吝賜教。
最近項目工作量很大,每天都能學習到很多東西,項目管理的、JAVA使用的、界面規范的......不勝枚舉,畢竟是第一次自己負責的項目,經驗和教訓肯定的巨大的。
作為一個項目經理,對作品、對自己的團隊都覺得立馬有了深深的責任感,也有了很大的壓力,感謝組織的信任與支持,感謝團隊的鼎力協作,感謝相關部門的大力配合,感謝姚老師的無私幫助,也感謝老婆默默的支持。
ありがとうございます
如何集中資源做成一個優秀的項目,如何擔當得起自己的責任,如何與各類角色溝通,真是任重而道遠。
來自王安琪新聞熱點
疑難解答