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定义、使用方法。现在看看它有多不规矩(其实也不是很不规矩啦,只是在ANQI这个节点下面的子节点名字每个都不一样,但都是以ITEM开头的)。要生成这样的XML,可以先用ObjectToXML()生成都是以 ITEM 命名的节点,再通过DOM读取并更新ITEM名称,后面加上1、2...要解析这样的XML,可以先把此XML过滤一遍,把ITEM*样的节点名称更新为 ITEM,再用XMLToObject()生成对象。 |
2、对于不规矩的XML格式,更好的办法是使用Marshaller所支持的自定义解析器,上面的不规矩XML完全可以映射到Map对象上面去。这种方法更能支持更不规则的XML定义。网上不知有无已经实现的代码,知道的同学,请不吝赐教。
最近项目工作量很大,每天都能学习到很多东西,项目管理的、JAVA使用的、界面规范的......不胜枚举,毕竟是第一次自己负责的项目,经验和教训肯定的巨大的。
作为一个项目经理,对作品、对自己的团队都觉得立马有了深深的责任感,也有了很大的压力,感谢组织的信任与支持,感谢团队的鼎力协作,感谢相关部门的大力配合,感谢姚老师的无私帮助,也感谢老婆默默的支持。
ありがとうございます
如何集中资源做成一个优秀的项目,如何担当得起自己的责任,如何与各类角色沟通,真是任重而道远。
来自王安琪新闻热点
疑难解答