使用Java提供的JAXB生成和解析XML

来源:互联网 发布:android 打开数据库 编辑:程序博客网 时间:2024/05/16 10:58

1.Student类:

package test;import java.util.List;import javax.xml.bind.annotation.XmlAttribute;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlElementWrapper;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement(name="stu")//根节点名public class Student {private int age;private int id;private String name;private List<Book> books;private String[] names;@XmlAttribute//封装成stu的属性,而不是子节点public int getId() {return id;}public void setId(int id) {this.id = id;}@XmlElementpublic String getName() {return name;}public void setName(String name) {this.name = name;}@XmlElement(name="age")//设置name属性改变xml节点名称,不设置默认为变量名public int getAge() {return age;}public void setAge(int age) {this.age = age;}@XmlElementWrapper(name="allBooks")//集合外层的节点名@XmlElement(name="book")public List<Book> getBooks() {return books;}public void setBooks(List<Book> books) {this.books = books;}@XmlElementWrapper(name="allNames")//数组外层的节点名称@XmlElementpublic String[] getNames() {return names;}public void setNames(String[] names) {this.names = names;}}


2.Book类

package test;import javax.xml.bind.annotation.XmlAttribute;public class Book {private int id;private String name;@XmlAttributepublic int getId() {return id;}public void setId(int id) {this.id = id;}@XmlAttributepublic String getName() {return name;}public void setName(String name) {this.name = name;}}


3.使用JAXB根据对象生成XML

package test;import java.io.File;import java.util.ArrayList;import java.util.List;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Marshaller;public class Test {public static void main(String[] args) {Student student = new Student();student.setId(1);student.setName("zhang");student.setAge(100);List<Book> books = new ArrayList<Book>();Book book1 = new Book();book1.setId(1);book1.setName("语文");Book book2 = new Book();book2.setId(2);book2.setName("数学");books.add(book1);books.add(book2);student.setBooks(books);student.setNames(new String[]{"张三娃子","狗蛋","三娃子"});try {File file = new File("D:\\student.xml");//创建xml文件JAXBContext context = JAXBContext.newInstance(Student.class);Marshaller mar = context.createMarshaller();mar.setProperty(Marshaller.JAXB_ENCODING, "gbk");//设置编码mar.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);//是否格式化xml文件mar.setProperty(Marshaller.JAXB_FRAGMENT, false);//是否取消xml头部(<?xml version="1.0" encoding="utf-8" standalone="yes"?>)mar.marshal(student, file);//把student写入student文件中mar.marshal(student, System.out); //按xml格式打印student对象} catch (JAXBException e) {e.printStackTrace();}}}


4.把xml文件或者String类型的xml字符串解析为对象

package test;import java.io.ByteArrayInputStream;import java.io.File;import java.io.IOException;import java.io.InputStream;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Unmarshaller;public class Test1 {public static void main(String[] args) {try {File file = new File("D:\\student.xml");//该xml字符串的必须加上头部(<?xml version=\"1.0\" encoding=\"gbk\"?>)才能解析成对象成功String xml = "<?xml version=\"1.0\" encoding=\"gbk\"?>" +" <stu id=\"1\">"+" <age>100</age>"+" <allBooks>"+" <book name=\"语文\" id=\"1\"/>"+" <book name=\"数学\" id=\"2\"/>"+" </allBooks>"+" <name>zhang</name>"+" <allNames>"+" <names>张三娃子</names>"+" <names>狗蛋</names>"+" <names>三娃子</names>"+" </allNames>"+" </stu>";InputStream byteArray = new ByteArrayInputStream(xml.getBytes());//把String字符串转换成流 JAXBContext context = JAXBContext.newInstance(Student.class);Unmarshaller unMar = context.createUnmarshaller();//Student student = (Student)unMar.unmarshal(file);//把xml文件直接转换为对象Student student = (Student)unMar.unmarshal(byteArray);System.out.println(student.getId());System.out.println(student.getAge());System.out.println(student.getName());for (String s : student.getNames()) {System.out.println("小名:"+s);}for (Book book : student.getBooks()) {System.out.println("书籍编号:"+book.getId()+"\t书籍名:"+book.getName());}} catch (JAXBException e) {e.printStackTrace();}}}


 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 京东商城买东西发现地址错了怎么办 京东分期付款买手机额度不够怎么办 亮皮银色高跟鞋时间放久变色怎么办 饿了么商家钱包提现被锁了怎么办 在淘手游买的游戏账号被找回怎么办 交易猫买手游梦幻号被找回了怎么办 绑定着苹果账号的邮箱忘记了怎么办 京东注册账号跟密码都忘记了怎么办 孩子大学一个宿舍宿友不行怎么办 微信手机支付密码忘记了怎么办 微信公众号不能付款了怎么办 头条误点了投放头条广告怎么办 交行网银密码错误6次怎么办 宁波新冮厦关门我们的消费卡怎么办 第一天上班别人教的学不会怎么办 老公出轨已经不想跟你爱爱了怎么办 妻子出轨丈夫为了孩子不离婚怎么办 妻子出轨分居死也不愿意离婚怎么办 拼多多个人卖家登录密码忘了怎么办 微信被限制添加更多订阅号了怎么办 知网复制粘贴的论文有格式怎么办 知网论文查询网站密码忘记了怎么办 开通了超级会员不能克隆好友怎么办 偷了家里好多钱去买手机了怎么办 中行信用卡短信邀请办白金卡怎么办 注册邮箱说邮箱地址已被注册怎么办 便利店开在小区里面没生意怎么办 微信支付密码忘了怎么办没银行卡 中行5月扣很多钱是怎么办 中银淘宝校园卡影响征信问题怎么办 中银E盾快到期了怎么办 京东e卡电子卡卡密泄漏怎么办 买错了京东e卡怎么办 京东购买手机激活后有问题怎么办 优购m9锁屏密码忘记了怎么办视频 中百仓储的购物卡过期了怎么办 武汉中百超市购物卡过期怎么办 已认证抵扣的发票发生退货怎么办 京东白条分期买手机额度不够怎么办 京东白条闪付手机不支持开通怎么办 拼多多不小心下两次单付款了怎么办