注解方式输出xml.docx_第1页
注解方式输出xml.docx_第2页
注解方式输出xml.docx_第3页
注解方式输出xml.docx_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

注解方式输出xml利用jaxb实现XML与对象相互转换JAXB(JavaAPIforXMLBinding)可以实现Java对象与XML的相互转换,在JAXB中,将一个Java对象转换为XML的过程称之为Marshal,将XML转换为Java对象的过程称之为UnMarshal。我们可以通过在Java类中标注注解的方式将一个Java对象绑定到一段XML,也就是说,在Java类中标注一些注解,这些注解定义了如何将这个类转换为XML,怎么转换,以及一段XML如何被解析成这个类所定义的对象。需要的JAR包:jaxb-api-2.0.jar(目前ASMS工程中已存在此JAR包),可以到/下载最新版本以下为JAVA代码示例XmlRootElement/注解表示将该类映射为XML根节点publicclassTicketOrderprivateStringorderId;privateStringpnr;privateStringorderStatus;privateListticketList;。publicclassTicketprivateStringpassengerId;privateStringpassengerName;privateStringticketNo;。publicclassXmlUtilspublicstaticvoidmain(Stringargs)throwsJAXBException/TicketOrder对象转换成XMLTicketOrderorder=newTicketOrder();order.setOrderId(1234);order.setOrderStatus(已出票);order.setPnr(TRTERT);ListticketList=newArrayList();Ticketticket=newTicket();ticket.setPassengerId(1);ticket.setPassengerName(张三);ticket.setTicketNo(7841111111111);ticketList.add(ticket);order.setTicketList(ticketList);StringWriterwriter=newStringWriter();JAXBContextjaxbContext=JAXBContext.newInstance(order.getClass();Marshallermarshaller=jaxbContext.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,Boolean.TRUE);/设置输出是否有XML格式/设置输入XML编码默认为“UTF-8”marshaller.setProperty(Marshaller.JAXB_ENCODING,GBK);/设置输入XML是否有“”/marshaller.setProperty(Marshaller.JAXB_FRAGMENT,Boolean.TRUE);marshaller.marshal(order,writer);System.out.println(writer.getBuffer().toString();/XML转换成TicketOrder对象Stringxml=“。”;JAXBContextjaxbContext=JAXBContext.newInstance(TicketOrder.class);Unmarshallerunmarshaller=jaxbContext.createUnmarshaller();TicketOrderticketOrder=(TicketOrder)unmarshaller.unmarshal(newStringReader(xml);从以上实例代码看出,其实Marshal和UnMarshal的过程并不复杂,只需要从JAXBContext中获得Marshaller或Unmarshaller对象,就可以让JAXB帮我们来进行转换了。我们需要操作的主要内容是定义一个规则,告诉JAXB如何将一个类、按照什么样的格式转换为XML,下面是JAXB中主要的一些注解的介绍。1、XmlRootElement将一个Java类映射为一段XML的根节点参数:name定义这个根节点的名称namespace定义这个根节点命名空间2、XmlAccessorType定义映射这个类中的何种类型需要映射到XML。参数:XmlAccessType.FIELD:映射这个类中的所有字段到XMLXmlAccessType.PROPERTY:映射这个类中的属性(get/set方法)到XMLXmlAccessType.PUBLIC_MEMBER:将这个类中的所有public的field或property同时映射到XML(默认)XmlAccessType.NONE:不映射3、XmlElement指定一个字段或get/set方法映射到XML的节点。如,当一个类的XmlAccessorType被标注为PROPERTY时,在某一个没有get/set方法的字段上标注此注解,即可将该字段映射到XML。参数:defaultValue指定节点默认值name指定节点名称namespace指定节点命名空间required是否必须(默认为false)nillable该字段是否包含nillable=true属性(默认为false)type定义该字段或属性的关联类型4、XmlAttribute指定一个字段或get/set方法映射到XML的属性。参数:name指定属性名称namespace指定属性命名空间required是否必须(默认为false)5、XmlTransient定义某一字段或属性不需要被映射为XML。如,当一个类的XmlAccessorType被标注为PROPERTY时,在某一get/set方法的字段上标注此注解,那么该属性则不会被映射。6、XmlType定义映射的一些相关规则参数:propOrder指定映射XML时的节点顺序factoryClas指定UnMarshal时生成映射类实例所需的工厂类,默认为这个类本身factoryMethod指定工厂类的工厂方法name定义XMLSchema中type的名称namespace指定Schema中的命名空间7、XmlElementWrapper为数组元素或集合元素定义一个父节点。如,类中有一元素为ListticketList,若不加此注解,该元素将被映射为.这种形式,此注解可将这个元素进行包装,如:XmlElementWrapper(name=ticketList)XmlElement(name=ticket)publicListticketList;将会生成这样的XML样式:.8、XmlJavaTypeAdapter自定义某一字段或属性映射到XML的适配器。如,类中包含一个接口,我们可以定义一个适配器(继承自javax.xml.bind.annotation.adapters.XmlAdapter类),指定这个接口如何映射到XML。9、XmlSchema配置整个包的namespace,这个注解需放在package-info.java文件中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论