java操作xml超简单的方法

用dom4j?SAX?no,no,no,光看api和帮助文档就烦,有没有更简单的方法呢?答案是有的。

那就是默默无名的:JAXB

jaxb是啥?

摘抄一段度娘百科的介绍:

JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类。JAXB允许JAVA人员将JAVA类映射为XML表示方式,常用的注解包括:@XmlRootElement,@XmlElement等等。

JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。

好的,下面开始介绍java 对象转换为xml

  1 import java.sql.Timestamp;
  2 import java.text.SimpleDateFormat;
  3
  4 import javax.xml.bind.annotation.XmlRootElement;
  5 import javax.xml.bind.annotation.adapters.XmlAdapter;
  6 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
  7
  8 /**
  9  * User entity. @author MyEclipse Persistence Tools
 10  */
 11 @XmlRootElement
 12 public class User implements java.io.Serializable {
 13
 14     // Fields
 15
 16     /**
 17      *
 18      */
 19     private static final long serialVersionUID = 1L;
 20     private Integer id;
 21     private String username;
 22     private String password;
 23     private String sex;
 24
 25     private Timestamp registTime;
 26
 27     // Constructors
 28
 29     /** default constructor */
 30     public User() {
 31     }
 32
 33     /** full constructor */
 34     public User(String username, String password, String sex,
 35             Timestamp registTime) {
 36         this.username = username;
 37         this.password = password;
 38         this.sex = sex;
 39         this.registTime = registTime;
 40     }
 41
 42     // Property accessors
 43
 44     public Integer getId() {
 45         return this.id;
 46     }
 47
 48     public void setId(Integer id) {
 49         this.id = id;
 50     }
 51
 52     public String getUsername() {
 53         return this.username;
 54     }
 55
 56     public void setUsername(String username) {
 57         this.username = username;
 58     }
 59
 60     public String getPassword() {
 61         return this.password;
 62     }
 63
 64     public void setPassword(String password) {
 65         this.password = password;
 66     }
 67
 68     public String getSex() {
 69         return this.sex;
 70     }
 71
 72     public void setSex(String sex) {
 73         this.sex = sex;
 74     }
 75
 76     @XmlJavaTypeAdapter(DateAdapter.class)
 77     public Timestamp getRegistTime() {
 78         return this.registTime;
 79     }
 80
 81     public void setRegistTime(Timestamp registTime) {
 82
 83         this.registTime = registTime;
 84     }
 85 }
 86
 87 /**
 88  * 日期类型得多花点操作和多个适配器
 89  *
 90  * @author Administrator
 91  *
 92  */
 93 class DateAdapter extends XmlAdapter<String, Timestamp> {
 94     private SimpleDateFormat yyyyMMddHHmmss = new SimpleDateFormat(
 95             "yyyy-MM-dd HH:mm:ss:SSS");
 96
 97     @Override
 98     public Timestamp unmarshal(String v) throws Exception {
 99         return new Timestamp(yyyyMMddHHmmss.parse(v).getTime());
100     }
101
102     @Override
103     public String marshal(Timestamp v) throws Exception {
104         return yyyyMMddHHmmss.format(v);
105     }
106 }

main方法测试代码:

 1 public class Test1 {
 2     public static void main(String[] args) {
 3         File xmlFile = new File("src/user.xml");
 4         try {
 5
 6             JAXBContext jc = JAXBContext.newInstance(User.class);
 7
 8             Marshaller u=jc.createMarshaller();
 9             User user=new User();
10             user.setId(0);
11             user.setPassword(UUID.randomUUID().toString().replaceAll("-", ""));
12             user.setRegistTime(new Timestamp(System.currentTimeMillis()));
13             user.setSex("男");
14             user.setUsername("1231123");
15             u.marshal(user, xmlFile);
16         } catch (Exception e) {
17             // TODO: handle exception
18         }
19     }
20 }

xml文件结果:

1 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2 <user>
3     <id>0</id>
4     <password>2c892394522c41c29264899cfa9ea565</password>
5     <registTime>2016-09-16 10:25:33:316</registTime>
6     <sex>男</sex>
7     <username>1231123</username>
8 </user>

是不是很简单?不用dom4j,不用阅读各种api文档,不用网上搜索资料,只需要实体类上面加上注解@XmlRootElement就行了,下面介绍xml转换为java bean:

 1 import java.io.File;
 2
 3 import javax.xml.bind.JAXBContext;
 4 import javax.xml.bind.Unmarshaller;
 5
 6 import com.qhmcc.entity.User;
 7
 8 public class Test1 {
 9     public static void main(String[] args) {
10         File xmlFile = new File("src/user.xml");
11         try {
12
13             JAXBContext jc = JAXBContext.newInstance(User.class);
14
15             Unmarshaller u=jc.createUnmarshaller();
16             User usr=(User) u.unmarshal(xmlFile);
17             System.out.println(usr.getUsername());
18             System.out.println(usr.getPassword());
19             System.out.println(usr.getSex());
20             System.out.println(usr.getId());
21             System.out.println(usr.getRegistTime());
22         } catch (Exception e) {
23             e.printStackTrace();
24         }
25     }
26 }

控制台结果如下:

1 1231123
2 2c892394522c41c29264899cfa9ea565
3 男
4 0
5 2016-09-16 10:25:33.316

时间: 2024-07-30 13:50:46

java操作xml超简单的方法的相关文章

java 读取文本文件超简单的方法

答案是:Scanner读取,初学者大部分都用过这货,然而这货还有这样两个构造方法: public Scanner(File source); public Scanner(InputStream stream); 那就是说:我完全可以传递个文件或者文件输入流过去,上代码: 1 public static void main(String[] args) { 2 try { 3 Scanner input = new Scanner(new FileInputStream("D:/a.txt&qu

java操作xml的一个小例子

最近两天公司事比较多,这两天自己主要跟xml打交道,今天更一下用java操作xml的一个小例子. 原来自己操作xml一直用这个包:xstream-1.4.2.jar.然后用注解的方式,很方便,自己只要定义好bean的层次结构就可以了,第三方包会自动生成和解析xml. 但是今天发现,这个包有两个问题: 一个是比较复杂(我是菜鸟,求别喷,我真的觉得他挺复杂的..).比如说你要想处理既有属性又有值的xml就比较麻烦.(@XStreamConverter注解这种方法报这个错:com.thoughtwor

详解Java解析XML的四种方法

(1)DOM解析 DOM是html和xml的应用程序接口(API),以层次结构(类似于树型)来组织节点和信息片段,映射XML文档的结构,允许获取 和操作文档的任意部分,是W3C的官方标准 [优点] ①允许应用程序对数据和结构做出更改. ②访问是双向的,可以在任何时候在树中上下导航,获取和操作任意部分的数据. [缺点] ①通常需要加载整个XML文档来构造层次结构,消耗资源大. [解析详解] ①构建Document对象: DocumentBuilderFactory dbf = DocumentBu

详解Java解析XML的四种方法(转)

XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML.本文将详细介绍用Java解析XML的四种方法. XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xm

Java学习之道:详解Java解析XML的四种方法

XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xml Schema Definition),XSLT(Extensible Stylesheet Language Transform

【Java】详解Java解析XML的四种方法

XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML.本文将详细介绍用Java解析XML的四种方法. AD: XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XS

Java操作XML的JAXB工具

在java中操作XML的工作中中,比较方便的工具是JAXB(Java Architecture for XML Binding). 利用这个工具很方便生成XML的tag和Java类的对应关系.参照网上的资料,简单说明一下java操作xml的一些东西. 1.先定义一个XML Schema文件.比如: [html] view plain copy print? <?xml version="1.0" encoding="UTF-8" standalone=&quo

java解析xml的三种方法

java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; // public class Saxhandler extends DefaultHandler { @Override public void startDocument() throws

c#操作XML文件的通用方法

c#操作XML文件的通用方法 本文导读:我们在编写C#程序时,经常会通过C#访问XML文件,实现对XML文档的读写操作.下面为大家列出了通用的调用方法,大家可以将这些方法放在共用类里,其它的程序共享调用就可以了. 下面通过一个类将我们平时用c#操作XML文件的通用方法详细的介绍一下,关于asp.net C#操作xml文档实现代码,大家可以参考参考. c# 代码 1 sing System; 2 using System.Data; 3 using System.Configuration; 4