笔记本电脑键盘键掉了背面这个是什么 掉了会对电脑有影响吗

23019人阅读
JAVA(38)
&&&&& JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到 XML实例文档。
&&&&& Jaxb 2.0是JDK 1.6的组成部分。我们不需要下载第三方jar包 即可做到轻松转换。Jaxb2使用了JDK的新特性,如:Annotation、GenericType等,需要在即将转换的JavaBean中添加annotation注解。
二、重要概念
JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。Marshaller接口,将Java对象序列化为XML数据。Unmarshaller接口,将XML数据反序列化为Java对象。
@XmlType,将Java类或枚举类型映射到XML模式类型@XmlAccessorType(XmlAccessType.FIELD) ,控制字段或属性的序列化。FIELD表示JAXB将自动绑定Java类中的每个非静态的(static)、非瞬态的(由@XmlTransient标 注)字段到XML。其他值还有XmlAccessType.PROPERTY和XmlAccessType.NONE。@XmlAccessorOrder,控制JAXB 绑定类中属性和字段的排序。@XmlJavaTypeAdapter,使用定制的适配器(即扩展抽象类XmlAdapter并覆盖marshal()和unmarshal()方法),以序列化Java类为XML。@XmlElementWrapper ,对于数组或集合(即包含多个元素的成员变量),生成一个包装该数组或集合的XML元素(称为包装器)。@XmlRootElement,将Java类或枚举类型映射到XML元素。@XmlElement,将Java类的一个属性映射到与属性同名的一个XML元素。@XmlAttribute,将Java类的一个属性映射到与属性同名的一个XML属性。
1、准备工作
Java代码&&
package&&&
import&java.io.StringR&&
import&java.io.StringW&&
import&javax.xml.bind.JAXBC&&
import&javax.xml.bind.M&&
import&javax.xml.bind.U&&
public&class&JaxbUtil&{&&
&&&&public&static&String&convertToXml(Object&obj)&{&&
&&&&&&&&return&convertToXml(obj,&&UTF-8&);&&
&&&&public&static&String&convertToXml(Object&obj,&String&encoding)&{&&
&&&&&&&&String&result&=&null;&&
&&&&&&&&try&{&&
&&&&&&&&&&&&JAXBContext&context&=&JAXBContext.newInstance(obj.getClass());&&
&&&&&&&&&&&&Marshaller&marshaller&=&context.createMarshaller();&&
&&&&&&&&&&&&marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,&true);&&
&&&&&&&&&&&&marshaller.setProperty(Marshaller.JAXB_ENCODING,&encoding);&&
&&&&&&&&&&&&StringWriter&writer&=&new&StringWriter();&&
&&&&&&&&&&&&marshaller.marshal(obj,&writer);&&
&&&&&&&&&&&&result&=&writer.toString();&&
&&&&&&&&}&catch&(Exception&e)&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&}&&
&&&&&&&&return&&&
&&&&@SuppressWarnings(&unchecked&)&&
&&&&public&static&&T&&T&converyToJavaBean(String&xml,&Class&T&&c)&{&&
&&&&&&&&T&t&=&null;&&
&&&&&&&&try&{&&
&&&&&&&&&&&&JAXBContext&context&=&JAXBContext.newInstance(c);&&
&&&&&&&&&&&&Unmarshaller&unmarshaller&=&context.createUnmarshaller();&&
&&&&&&&&&&&&t&=&(T)&unmarshaller.unmarshal(new&StringReader(xml));&&
&&&&&&&&}&catch&(Exception&e)&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&}&&
&&&&&&&&return&t;&&
&&&&& 非常简单易懂,需要注意的是
Java代码&&
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,&true);&&
marshaller.setProperty(Marshaller.JAXB_ENCODING,&encoding);&&
Marshaller.JAXB_FORMATTED_OUTPUT&决定是否在转换成xml时同时进行格式化(即按标签自动换行,否则即是一行的xml)
Marshaller.JAXB_ENCODING&xml的编码方式
另外,Marshaller&还有其他Property可以设置,可以去查阅api。
2、最简单转换
Java代码&&
package&t1;&&
import&java.util.D&&
import&javax.xml.bind.annotation.XmlAccessT&&
import&javax.xml.bind.annotation.XmlAccessorT&&
import&javax.xml.bind.annotation.XmlA&&
import&javax.xml.bind.annotation.XmlE&&
import&javax.xml.bind.annotation.XmlRootE&&
import&javax.xml.bind.annotation.XmlT&&
@XmlAccessorType(XmlAccessType.FIELD)&&
@XmlRootElement&&
@XmlType(name&=&&book&,&propOrder&=&{&&author&,&&calendar&,&&price&,&&id&&})&&
public&class&Book&{&&
&&&&@XmlElement(required&=&true)&&
&&&&private&String&&&
&&&&@XmlElement(name&=&&price_1&,&required&=&true)&&
&&&&private&float&&&
&&&&@XmlElement&&
&&&&private&Date&&&
&&&&@XmlAttribute&&
&&&&private&Integer&&&
&&&&public&String&getAuthor()&{&&
&&&&&&&&return&&&
&&&&public&float&getPrice()&{&&
&&&&&&&&return&&&
&&&&public&Date&getCalendar()&{&&
&&&&&&&&return&&&
&&&&public&Integer&getId()&{&&
&&&&&&&&return&&&
&&&&public&void&setAuthor(String&author)&{&&
&&&&&&&&this.author&=&&&
&&&&public&void&setPrice(float&price)&{&&
&&&&&&&&this.price&=&&&
&&&&public&void&setCalendar(Date&calendar)&{&&
&&&&&&&&this.calendar&=&&&
&&&&public&void&setId(Integer&id)&{&&
&&&&&&&&this.id&=&&&
&&&&@Override&&
&&&&public&String&toString()&{&&
&&&&&&&&return&&Book&[author=&&+&author&+&&,&price=&&+&price&+&&,&calendar=&&+&calendar&+&&,&id=&&+&id&+&&]&;&&
Java代码&&
package&t1;&&
import&java.util.D&&
import&javax.xml.bind.JAXBE&&
import&org.junit.T&&
import&utils.JaxbU&&
public&class&JaxbTest1&{&&
&&&&@Test&&
&&&&public&void&showMarshaller()&&{&&
&&&&&&&&Book&book&=&new&Book();&&
&&&&&&&&book.setId(100);&&
&&&&&&&&book.setAuthor(&James&);&&
&&&&&&&&book.setCalendar(new&Date());&&
&&&&&&&&book.setPrice(23.45f);&&&&&
&&&&&&&&&&
&&&&&&&&String&str&=&JaxbUtil.convertToXml(book);&&
&&&&&&&&System.out.println(str);&&
&&&&@Test&&
&&&&public&void&showUnMarshaller()&{&&
&&&&&&&&String&str&=&&&?xml&version=\&1.0\&&encoding=\&UTF-8\&&standalone=\&yes\&?&&&+&&
&&&&&&&&&&&&&&book&id=\&100\&&&&+&&
&&&&&&&&&&&&&&&&&&author&James&/author&&&+&&
&&&&&&&&&&&&&&&&&&calendar&T09:25:56.004+08:00&/calendar&&&+&&
&&&&&&&&&&&&&&&&&&price_1&23.45&/price_1&&&+&&
&&&&&&&&&&&&&&/book&&;&&
&&&&&&&&&&
&&&&&&&&Book&book&=&JaxbUtil.converyToJavaBean(str,&Book.class);&&
&&&&&&&&System.out.println(book);&&
输出结果分别为:
&?xml version=&1.0& encoding=&UTF-8& standalone=&yes&?&
&book id=&100&&
&&& &author&James&/author&
&&& &calendar&T14:50:58.974+08:00&/calendar&
&&& &price_1&23.45&/price_1&
Book [author=James, price=23.45, calendar=Fri Mar 29 09:25:56 CST 2013, id=100]
3、类中包含复杂对象的转换
Java代码&&
package&t2;&&
import&javax.xml.bind.annotation.XmlAccessT&&
import&javax.xml.bind.annotation.XmlAccessorT&&
import&javax.xml.bind.annotation.XmlA&&
import&javax.xml.bind.annotation.XmlE&&
import&javax.xml.bind.annotation.XmlRootE&&
import&javax.xml.bind.annotation.XmlT&&
@XmlAccessorType(XmlAccessType.FIELD)&&
@XmlRootElement(name&=&&student&)&&
@XmlType(propOrder&=&{})&&
public&class&Student&{&&
&&&&@XmlAttribute&&
&&&&private&Integer&&&
&&&&@XmlElement&&
&&&&private&String&&&
&&&&@XmlElement(name&=&&role&)&&
&&&&private&Role&&&
&&&&public&Integer&getId()&{&&
&&&&&&&&return&&&
&&&&public&String&getName()&{&&
&&&&&&&&return&&&
&&&&public&Role&getRole()&{&&
&&&&&&&&return&&&
&&&&public&void&setId(Integer&id)&{&&
&&&&&&&&this.id&=&&&
&&&&public&void&setName(String&name)&{&&
&&&&&&&&this.name&=&&&
&&&&public&void&setRole(Role&role)&{&&
&&&&&&&&this.role&=&&&
&&&&@Override&&
&&&&public&String&toString()&{&&
&&&&&&&&return&&Student&[id=&&+&id&+&&,&name=&&+&name&+&&,&role=&&+&role&+&&]&;&&
Java代码&&
package&t2;&&
import&javax.xml.bind.annotation.XmlAccessT&&
import&javax.xml.bind.annotation.XmlAccessorT&&
import&javax.xml.bind.annotation.XmlE&&
import&javax.xml.bind.annotation.XmlT&&
@XmlAccessorType(XmlAccessType.FIELD)&&
@XmlType(propOrder&=&{&&name&,&&desc&&})&&
public&class&Role&{&&
&&&&@XmlElement&&
&&&&private&String&&&
&&&&@XmlElement&&
&&&&private&String&&&
&&&&public&String&getName()&{&&
&&&&&&&&return&&&
&&&&public&String&getDesc()&{&&
&&&&&&&&return&&&
&&&&public&void&setName(String&name)&{&&
&&&&&&&&this.name&=&&&
&&&&public&void&setDesc(String&desc)&{&&
&&&&&&&&this.desc&=&&&
&&&&@Override&&
&&&&public&String&toString()&{&&
&&&&&&&&return&&Role&[name=&&+&name&+&&,&desc=&&+&desc&+&&]&;&&
Java代码&&
package&t2;&&
import&org.junit.T&&
import&utils.JaxbU&&
public&class&JaxbTest2&{&&
&&&&@Test&&
&&&&public&void&showMarshaller()&{&&
&&&&&&&&Student&student&=&new&Student();&&
&&&&&&&&student.setId(12);&&
&&&&&&&&student.setName(&test&);&&
&&&&&&&&Role&role&=&new&Role();&&
&&&&&&&&role.setDesc(&管理&);&&
&&&&&&&&role.setName(&班长&);&&
&&&&&&&&student.setRole(role);&&
&&&&&&&&String&str&=&JaxbUtil.convertToXml(student);&&
&&&&&&&&System.out.println(str);&&
&&&&@Test&&
&&&&public&void&showUnMarshaller()&{&&
&&&&&&&&String&str&=&&&?xml&version=\&1.0\&&encoding=\&UTF-8\&&standalone=\&yes\&?&&+&&
&&&&&&&&&&&&&&student&id=\&12\&&&+&&
&&&&&&&&&&&&&&&&&&name&test&/name&&+&&
&&&&&&&&&&&&&&&&&&role&&+&&
&&&&&&&&&&&&&&&&&&&&&&name&班长&/name&&+&&
&&&&&&&&&&&&&&&&&&&&&&desc&管理&/desc&&+&&
&&&&&&&&&&&&&&&&&&/role&&+&&
&&&&&&&&&&&&&&/student&&;&&
&&&&&&&&Student&student&=&JaxbUtil.converyToJavaBean(str,&Student.class);&&
&&&&&&&&System.out.println(student);&&
输出结果分别为:
&?xml version=&1.0& encoding=&UTF-8& standalone=&yes&?&
&student id=&12&&
&&& &name&test&/name&
&&& &role&
&&&&&&& &name&班长&/name&
&&&&&&& &desc&管理&/desc&
&&& &/role&
&/student&
Student [id=12, name=test, role=Role [name=班长, desc=管理]]
4、集合对象的转换(同样适用于Set)
Java代码&&
package&t3;&&
import&java.util.L&&
import&javax.xml.bind.annotation.XmlAccessT&&
import&javax.xml.bind.annotation.XmlAccessorT&&
import&javax.xml.bind.annotation.XmlE&&
import&javax.xml.bind.annotation.XmlElementW&&
import&javax.xml.bind.annotation.XmlRootE&&
import&javax.xml.bind.annotation.XmlT&&
@XmlAccessorType(XmlAccessType.FIELD)&&
@XmlRootElement(name&=&&country&)&&
@XmlType(propOrder&=&{&&name&,&&provinceList&&})&&
public&class&Country&{&&
&&&&@XmlElement(name&=&&country_name&)&&
&&&&private&String&&&
&&&&@XmlElementWrapper(name&=&&provinces&)&&
&&&&@XmlElement(name&=&&province&)&&
&&&&private&List&Province&&provinceL&&
&&&&public&String&getName()&{&&
&&&&&&&&return&&&
&&&&public&List&Province&&getProvinceList()&{&&
&&&&&&&&return&provinceL&&
&&&&public&void&setName(String&name)&{&&
&&&&&&&&this.name&=&&&
&&&&public&void&setProvinceList(List&Province&&provinceList)&{&&
&&&&&&&&this.provinceList&=&provinceL&&
&&&&@Override&&
&&&&public&String&toString()&{&&
&&&&&&&&return&&Country&[name=&&+&name&+&&,&provinceList=&&+&provinceList&+&&]&;&&
Java代码&&
package&t3;&&
import&javax.xml.bind.annotation.XmlAccessT&&
import&javax.xml.bind.annotation.XmlAccessorT&&
import&javax.xml.bind.annotation.XmlE&&
import&javax.xml.bind.annotation.XmlT&&
@XmlAccessorType(XmlAccessType.FIELD)&&
@XmlType(propOrder&=&{&&name&,&&provCity&&})&&
public&class&Province&{&&
&&&&@XmlElement(name&=&&province_name&)&&
&&&&private&String&&&
&&&&@XmlElement(name&=&&prov_city&)&&
&&&&private&String&provC&&
&&&&public&String&getProvCity()&{&&
&&&&&&&&return&provC&&
&&&&public&void&setProvCity(String&provCity)&{&&
&&&&&&&&this.provCity&=&provC&&
&&&&public&String&getName()&{&&
&&&&&&&&return&&&
&&&&public&void&setName(String&name)&{&&
&&&&&&&&this.name&=&&&
&&&&@Override&&
&&&&public&String&toString()&{&&
&&&&&&&&return&&Province&[name=&&+&name&+&&,&provCity=&&+&provCity&+&&]&;&&
Java代码&&
package&t3;&&
import&java.util.ArrayL&&
import&java.util.L&&
import&org.junit.T&&
import&utils.JaxbU&&
public&class&JaxbTest3&{&&
&&&&@Test&&
&&&&public&void&showMarshaller()&{&&
&&&&&&&&Country&country&=&new&Country();&&
&&&&&&&&country.setName(&中国&);&&
&&&&&&&&List&Province&&list&=&new&ArrayList&Province&();&&
&&&&&&&&Province&province&=&new&Province();&&
&&&&&&&&province.setName(&江苏省&);&&
&&&&&&&&province.setProvCity(&南京市&);&&
&&&&&&&&Province&province2&=&new&Province();&&
&&&&&&&&province2.setName(&浙江省&);&&
&&&&&&&&province2.setProvCity(&杭州市&);&&
&&&&&&&&list.add(province);&&
&&&&&&&&list.add(province2);&&
&&&&&&&&country.setProvinceList(list);&&
&&&&&&&&String&str&=&JaxbUtil.convertToXml(country);&&
&&&&&&&&System.out.println(str);&&
&&&&@Test&&
&&&&public&void&showUnMarshaller()&{&&
&&&&&&&&String&str&=&&&?xml&version=\&1.0\&&encoding=\&UTF-8\&&standalone=\&yes\&?&&+&&
&&&&&&&&&&&&&&country&&+&&
&&&&&&&&&&&&&&&&&&country_name&中国&/country_name&&+&&
&&&&&&&&&&&&&&&&&&provinces&&+&&
&&&&&&&&&&&&&&&&&&&&&&province&&+&&
&&&&&&&&&&&&&&&&&&&&&&&&&&province_name&江苏省&/province_name&&+&&
&&&&&&&&&&&&&&&&&&&&&&&&&&prov_city&南京市&/prov_city&&+&&
&&&&&&&&&&&&&&&&&&&&&&/province&&+&&
&&&&&&&&&&&&&&&&&&&&&&province&&+&&
&&&&&&&&&&&&&&&&&&&&&&&&&&province_name&浙江省&/province_name&&+&&
&&&&&&&&&&&&&&&&&&&&&&&&&&prov_city&杭州市&/prov_city&&+&&
&&&&&&&&&&&&&&&&&&&&&&/province&&+&&
&&&&&&&&&&&&&&&&&&/provinces&&+&&
&&&&&&&&&&&&&&/country&&;&&
&&&&&&&&Country&country&=&JaxbUtil.converyToJavaBean(str,&Country.class);&&
&&&&&&&&System.out.println(country);&&
输出结果分别为:
&?xml version=&1.0& encoding=&UTF-8& standalone=&yes&?&
&&& &country_name&中国&/country_name&
&&& &provinces&
&&&&&&& &province&
&&&&&&&&&&& &province_name&江苏省&/province_name&
&&&&&&&&&&& &prov_city&南京市&/prov_city&
&&&&&&& &/province&
&&&&&&& &province&
&&&&&&&&&&& &province_name&浙江省&/province_name&
&&&&&&&&&&& &prov_city&杭州市&/prov_city&
&&&&&&& &/province&
&&& &/provinces&
&/country&
Country [name=中国, provinceList=[Province [name=江苏省, provCity=南京市], Province [name=浙江省, provCity=杭州市]]]
点击查看& &
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:260578次
积分:2976
积分:2976
排名:第9087名
原创:40篇
转载:90篇
评论:12条
(7)(13)(5)(3)(1)(1)(10)(11)(8)(7)(1)(13)(8)(8)(21)(13)(1)(1)(1)(5)(1)(2)(7)(3)打怪升级(14)
JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类。
JDK中JAXB相关的重要Class和Interface:
JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。
Marshaller接口,将Java对象序列化为XML数据。
Unmarshaller接口,将XML数据反序列化为Java对象。
JDK中JAXB相关的重要Annotation:
一般用到的就几个:
@XmlRootElement:表示映射到根目录标签元素
@XmlElement:表示映射到子元素
@XmlAttribute:表示映射到属性
@XmlElementWrapper
:表示类型是集合元素的子元素的上层目录
要把实现相互转换,首先你得根据目录结构设计类对象
比如xml中有一下目录:
&C c=&..&&&/C&
&E e=&...&&
那么Java Bean 有ClassA、ClaccC、ClassD、ClassE、ClassG5个类
对于JAXB相关的重要Annotation的声明,如@Xml.....,可以放在成员变量的setter()或getter()方法上,两者中任选其一即可,但决不能放在成员变量上,否则运行将抛出异常com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException。
@XmlRootElement(name = &A&)
Class ClassA{
@XmlElement(name = &B&)
@XmlElement(name = &C&)
@XmlElement(name = &D&)
@XmlRootElement(name = &C&)
Class ClassC{
@XmlAttribute(name = &c&)
@@XmlRootElement(name = &D&)
Class ClassD{
@XmlElement(name = &E&)
@@XmlRootElement(name = &E&)
Class ClassE{
@XmlAttribute(name = &e&)
@XmlElement(name = &F&)
@XmlElement(name = &G&)
@XmlRootElement(name = &G&)
Class ClassG{
@XmlAttribute(name = &H&)
@XmlAttribute(name = &M&)
下面介绍如何将xml文件转换为Bean
public static void main(String[] args) {
//xml转换成bean
File file = new File(&C:\\file1.xml&);
JAXBContext jaxbContext = JAXBContext.newInstance(A.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
A a = (A) jaxbUnmarshaller.unmarshal(file);
System.out.println(fox.toString());
} catch (JAXBException e) {
e.printStackTrace();
}如果xml文件中有中文,记得把编码方式从UTF-8变为GBK
将bean转换为xml
这个之后再来说
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:27055次
积分:1345
积分:1345
排名:千里之外
原创:114篇
(4)(11)(1)(1)(4)(2)(8)(2)(41)(9)(30)(1)2903人阅读
jaxml各参数请看:
package com.
import java.util.D
import java.util.L
import javax.xml.bind.annotation.XmlE
import javax.xml.bind.annotation.XmlRootE
import javax.xml.bind.annotation.XmlT
import javax.xml.bind.annotation.adapters.XmlJavaTypeA
@XmlRootElement(name = &person&)
public class Person {
@XmlElement(name = &name&)
@XmlElement(name = &age&)
@XmlElement(name = &BasicData&)
private List&Child&
@XmlElement(name = &time&)
@XmlJavaTypeAdapter(JaxbDateSerializer.class)
public Date getD() {
public void setD(Date d) {
@XmlTransient
public List&Child& getChildren() {
public void setChildren(List&Child& children) {
this.children =
@XmlTransient
public String getName() {
public void setName(String name) {
this.name =
@XmlTransient
public String getAge() {
public void setAge(String age) {
this.age =
Child.java
package com.
import javax.xml.bind.annotation.XmlAccessorT
import javax.xml.bind.annotation.XmlRootE
import javax.xml.bind.annotation.XmlAccessT
@XmlRootElement(name=&BasicData&)
@XmlAccessorType(XmlAccessType.FIELD)
public class Child {
public String getSex() {
public void setSex(String sex) {
this.sex =
JaxbDateSerializer.java 处理Date
package com.
import java.text.SimpleDateF
import java.util.D
import javax.xml.bind.annotation.adapters.XmlA
public class JaxbDateSerializer extends XmlAdapter&String, Date&{
private SimpleDateFormat dateFormat = new SimpleDateFormat(&yyyy-MM-dd&);
public String marshal(Date date) throws Exception {
return dateFormat.format(date);
public Date unmarshal(String date) throws Exception {
return dateFormat.parse(date);
package com.
import java.io.FileW
import java.io.IOE
import java.io.StringW
import java.net.URL;
import java.util.D
import java.util.ArrayL
import java.util.L
import javax.xml.bind.JAXBC
import javax.xml.bind.JAXBE
import javax.xml.bind.M
import javax.xml.bind.U
public class Test {
public static void main(String[] args) throws JAXBException, IOException{
System.out.println(java.net.URLEncoder.encode(&的&,&utf-8&));
//java 类 转 xml 文件
List&Child& l = new ArrayList&Child&();
Person p = new Person();
p.setAge(&123&);
p.setName(&周顺&);
p.setD(new Date());
for(int i=0;i&5;i++){
Child c = new Child();
c.setSex(i+&&);
p.setChildren(l);
StringWriter writer = new StringWriter();
URL read = ClassLoader.getSystemResource(&com/test/person.xml&);
FileWriter fw = new FileWriter(read.getPath());
JAXBContext context = JAXBContext.newInstance(Person.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.setProperty(Marshaller.JAXB_ENCODING, &GBK&); //防止文件中文乱码
m.marshal(p, writer);
m.marshal(p, fw);
fw.flush();
fw.close();
String xml = writer.toString();
System.out.println(xml);
// xml文件转java类
JAXBContext context2 = JAXBContext.newInstance(Person.class);
Unmarshaller unmarshaller = context2.createUnmarshaller();
//class目录 jaxb/bin
//URL xmlFileUrl = ClassLoader.getSystemResource(&&);
URL xmlFileUrl = ClassLoader.getSystemResource(&com/test/person.xml&);
System.out.println(xmlFileUrl.getPath());
Person p2 = (Person) unmarshaller.unmarshal(xmlFileUrl);
// &SAXReader reader = new SAXReader(); &&
& & & & & //& Document document = reader.read(new File(
& & & & & &//Test.class.getClassLoader().getResource(&com/test/person.xml&).getPath()));
& & & //&Person p2 = (Person) unmarshaller.unmarshal(new StringReader(document.asXML()));
System.out.println(p2.getName());
System.out.println(p2.getChildren().get(4).getSex());
&?xml version=&1.0& encoding=&UTF-8& standalone=&yes&?&
&person&&name&zhoushun&/name&&age&123&/age&&BasicData&&sex&0&/sex&&/BasicData&&BasicData&&sex&1&/sex&&/BasicData&&BasicData&&sex&2&/sex&&/BasicData&&BasicData&&sex&3&/sex&&/BasicData&&BasicData&&sex&4&/sex&&/BasicData&&time&&/time&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4334494次
积分:41911
积分:41911
排名:第69名
原创:211篇
转载:2248篇
评论:461条
(25)(96)(177)(114)(86)(40)(43)(73)(15)(10)(17)(12)(6)(20)(27)(54)(71)(97)(74)(32)(2)(24)(21)(62)(60)(36)(23)(27)(46)(34)(76)(63)(121)(142)(74)(54)(120)(77)(42)(4)(12)(19)(1)(9)(15)(19)(18)(16)(31)(79)(68)三步解决JAXB生成XML包含CDATA问题—JAVA编程 - 天蓝蓝 - ITeye技术网站
博客分类:
废话不多说,写此文档的目的就是为了帮助java开发者,解决利用JAXB生成XML时,XML中带有CDATA问题。
分三步走:
首先创建适配器类:CDataAdapter.java
package com.
import javax.xml.bind.annotation.adapters.XmlA
//有时候 Java 类不能自然映射到自己所需的 XML 形式,
//这时需要编写自己的适配器类,通过注解绑定到javabean的成员变量上,
//在运行的时候jaxb框架自动会适配你所编写的适配器类的方法,
//CDataAdapter.marshal(String str),将javabean的成员变量的value值
//转变成你想要的形式。
public class CDataAdapter extends XmlAdapter&String, String& {
//从javabean到xml的适配方法
public String marshal(String str) throws Exception {
return "&![CDATA[" + str+ "]]&";
//从xml到javabean的适配方法
public String unmarshal(String str) throws Exception {
其次创建JAXB生成XML的工具类:JaxbToXmlUtil.java
package com.
import java.io.IOEimport java.io.StringWimport java.io.W
import javax.xml.bind.JAXBCimport javax.xml.bind.JAXBEimport javax.xml.bind.M
import com.sun.xml.internal.bind.marshaller.CharacterEscapeH
//这里用到了JAXB的核心类和方法,不懂可以去查看下JAXB基础应用,
//这里只做关键解释。
public class JaxbToXmlUtil {
public static String convertToXml(Object obj, String encoding) {
String result =
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
//去掉生成xml的默认报文头。
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
//转换所有的适配字符,包括xml实体字符&和&,xml实体字符在好多处理xml
//的框架中是处理不了的,除非序列化。
marshaller.setProperty("com.sun.xml.internal.bind.marshaller.CharacterEscapeHandler",
new CharacterEscapeHandler() {
public void escape(char[] ch, int start,int length, boolean isAttVal,
Writer writer) throws IOException {
writer.write(ch, start, length);
StringWriter writer = new StringWriter();
//添加自己想要的xml报文头
writer.write("&?xml version=\'1.0\' encoding=\'" + encoding + "\'?&\n");
marshaller.marshal(obj, writer);
result = writer.toString();
} catch (JAXBException e) {
e.printStackTrace();
最后创建用于转换成XML文件的javabean:Root.java
package com.
import javax.xml.bind.annotation.XmlAccessTimport javax.xml.bind.annotation.XmlAccessorTimport javax.xml.bind.annotation.XmlRootEimport javax.xml.bind.annotation.adapters.XmlJavaTypeA
@XmlRootElement@XmlAccessorType(XmlAccessType.FIELD)public class Root {
//绑定自己的适配器类,适配希望包含在CData数据块中的javabean成员变量。
//这里的空值是为了测试,无其他涵义。
@XmlJavaTypeAdapter(CDataAdapter.class)
private String name = "";
@XmlJavaTypeAdapter(CDataAdapter.class)
public String getName() {
public void setName(String name) {
this.name =
public String getSurname() {
public void setSurname(String surname) {
this.surname =
public String getId() {
public void setId(String id) {
上面三步就可以解决利用JAXB生成XML时,XML中包含CDATA数据块的问题。
下面是用于测试的类:JaxbTest.java
package com.
public class JaxbTest {
public static void main(String[] arg) {
Root root = new Root(); root.setId("ddd"); root.setSurname("jiiii");
//由于在javabean中赋值为空,这句可以不要,也可以去掉javabean中的赋空值语句 root.setName(""); String str = JaxbToXmlUtil.convertToXml(root, "GBK"); System.out.println(str); }
控制台输出结果:
&?xml version='1.0' encoding='GBK'?&&root&
&name&&![CDATA[]]&&/name&
&surname&&![CDATA[jiiii]]&&/surname&
&id&ddd&/id&&/root&
如有疑问请提出,我会及时回复,多多交流!
浏览: 5621 次
来自: 北京

我要回帖

更多关于 笔记本电脑wifi老掉线 的文章

 

随机推荐