java对于xml的转换有很多种,比较有名的有:DOM, DOM4J, JDOM, SAX。这里要介绍的是javax.xml包的对xml文件的转换。相比于前面几种是最简单的。

直接上代码:

Student.java:

 @XmlRootElement
 public class Student {
     private String name;
     private String width;
     private String height;
     private int age;
     public Student() {
         super();
     }
     public Student(String name, String width, String height, int age) {
         super();
         this.name = name;
         this.width = width;
         this.height = height;
         this.age = age;
     }
     public String getName() {
         return name;
     }
     public void setName(String name) {
         this.name = name;
     }
     public String getWidth() {
         return width;
     }
     public void setWidth(String width) {
         this.width = width;
     }
     public String getHeight() {
         return height;
     }
     public void setHeight(String height) {
         this.height = height;
     }
     public int getAge() {
         return age;
     }
     public void setAge(int age) {
         this.age = age;
     }
     @Override
     public String toString() {
         return "Student [name=" + name + ", width=" + width + ", height="
                 + height + ", age=" + age + "]";
     }

 }

BaseTest.java:

 public class BaseTest {
     @Test
     public void test01() throws JAXBException {
         JAXBContext jc = JAXBContext.newInstance(Student.class);
         Marshaller ms = jc.createMarshaller();
         ms.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
         ms.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
         Student st = new Student("zhang", "w", "h", 11);
         ms.marshal(st, new File("student.xml"));

         StringWriter writer = new StringWriter();
         ms.marshal(st, writer);
         System.out.println(writer.toString());
     }
     @Test
     public void test02() throws JAXBException {
         String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
                 + "<student><age>11</age><height>h</height><name>zhang</name><width>w</width></student>";
         JAXBContext jc = JAXBContext.newInstance(Student.class);
         Unmarshaller unmar = jc.createUnmarshaller();
         File f = new File("student.xml");
         Student st = (Student)unmar.unmarshal(f);
         System.out.println(st);
         Student st1 = (Student)unmar.unmarshal(new StringReader(xml));
         System.out.println(st1);
     }
 }

@XmlRootElement即是对该类进行反射映射为xml。

如果没有@XmlElement,默认对Property进行反射,xml node的名字与该属性名相同,如果不同,需要加上@XmlElement

如果有@XmlElement,注意该注解必须放与get方法之前。

RootClass:

 @XmlRootElement(name="rootclass")
 public class RootClass {

     private EleClassA a;

     private EleClassB b;

     private String root;

     private String rootA;
     private String transientField;

     public RootClass() {
         super();
     }
     public RootClass(String transientField) {
         //super();
         this.transientField = transientField;
     }
     private List<String> items;

     @XmlElement(name="eleClassA")
     public EleClassA getA() {
         return a;
     }
     public void setA(EleClassA a) {
         this.a = a;
     }
     @XmlElement(name="EleClassA")
     public EleClassB getB() {
         return b;
     }
     public void setB(EleClassB b) {
         this.b = b;
     }
     public String getRoot() {
         return root;
     }
     public void setRoot(String root) {
         this.root = root;
     }
     @XmlTransient
     public String getRootA() {
         return rootA;
     }
     public void setRootA(String rootA) {
         this.rootA = rootA;
     }
     @XmlElementWrapper(name="items")
     @XmlElement(name="item")
     public List<String> getItems() {
         return items;
     }
     public void setItems(List<String> items) {
         this.items = items;
     }
 }

EleClassA:

 public class EleClassA {
     private String eleA;
     private String eleB;
     private String attrC;
     @XmlElement
     public String getEleA() {
         return eleA;
     }
     public void setEleA(String eleA) {
         this.eleA = eleA;
     }
     @XmlElement(name="elebnewname")
     public String getEleB() {
         return eleB;
     }
     public void setEleB(String eleB) {
         this.eleB = eleB;
     }
     @XmlAttribute
     public String getAttrC() {
         return attrC;
     }
     public void setAttrC(String attrC) {
         this.attrC = attrC;
     }

 }

EleClassB:

 public class EleClassB {
     private String attrUserName;
     private String attrPassword;
     private String eleCode;
     @XmlAttribute
     public String getAttrUserName() {
         return attrUserName;
     }
     public void setAttrUserName(String attrUserName) {
         this.attrUserName = attrUserName;
     }
     @XmlAttribute(name="password")
     public String getAttrPassword() {
         return attrPassword;
     }
     public void setAttrPassword(String attrPassword) {
         this.attrPassword = attrPassword;
     }
     @XmlElement
     public String getEleCode() {
         return eleCode;
     }
     public void setEleCode(String eleCode) {
         this.eleCode = eleCode;
     }
 }

AttributeTest:

 public class AttributeTest {

     @Test
     public void test01() throws JAXBException {
         RootClass rc = new RootClass("transient");
         //RootClass rc = new RootClass();
         EleClassA a = new EleClassA();
         EleClassB b = new EleClassB();

         a.setAttrC("attrC");
         a.setEleA("eleA");
         a.setEleB("eleB");

         b.setAttrPassword("attrPassword");
         b.setAttrUserName("attrUsrName");
         b.setEleCode("eleCode");

         List<String> l = new ArrayList<String>();
         l.add("yingzhongwen");
         l.add("hetao");
         l.add("xinwang");

         rc.setA(a);
         rc.setB(b);
         rc.setRoot("root");
         rc.setRootA("rootA");
         rc.setItems(l);

         JAXBContext context = JAXBContext.newInstance(RootClass.class);
         Marshaller mar = context.createMarshaller();
         mar.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
         mar.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

         StringWriter writer = new StringWriter();
         mar.marshal(rc, writer);
         System.out.println(writer.toString());
     }
 }

Java: xml转换的更多相关文章

  1. Java对象转换成xml对象和Java对象转换成JSON对象

    1.把Java对象转换成JSON对象 apache提供的json-lib小工具,它可以方便的使用Java语言来创建JSON字符串.也可以把JavaBean转换成JSON字符串. json-lib的核心 ...

  2. Java对象和XML转换

    有时候,我们需要把Java对象转换成XML文件.这时可以用JAXB来实现.(JDK1.6及以后的版本无需导入依赖包,因为已经包含在JDK里了) 假如某个公司有许多部门,每个部门有许多职员,我们可以这样 ...

  3. Dom4j把xml转换成Map(非固定格式)

    将xml转换成Map,能够应对不用结构的xml,而不是只针对固定格式的xml.转换规则:1.主要是Map与List的互相嵌套2.同名称的节点会被装进List 示例: import java.util. ...

  4. 【Java】Java XML 技术专题

    XML 基础教程 XML 和 Java 技术 Java XML文档模型 JAXP(Java API for XML Parsing) StAX(Streaming API for XML) XJ(XM ...

  5. 转 JSON与XML转换

    这两天处理模块的联调工作,在json与XML转换中出现了一些奇怪的问题,仔细究来,实为对org.json.*包知之太少.晚上baidu.google一下,找出了问题出现的原因.在模块中,使用了两个方法 ...

  6. XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

    本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...

  7. 如何将 Java 项目转换成 Maven 项目

    本文内容 Java 项目 Maven 项目 Java 项目转换成 Maven 项目 本文主要介绍如何将 Java 项目转换成 Maven 项目.首先要明确的是,用 Maven 管理 Java 项目的确 ...

  8. Maven 学习笔记——将普通的Java项目转换成Maven项目(3)

    将一个普通的java项目转换成Maven项目并不是一个很大的任务,仅仅只需要下面的几步就能将转换成功.下面我是用一个简单的Selenium测试小demon作为例子来说的. 移调项目中所有关联的Libr ...

  9. jsonUtils&&Json、Xml转换工具Jackson使用

    1.jsonUtils package com.icil.utils; import java.util.List; import com.fasterxml.jackson.core.JsonPro ...

随机推荐

  1. 【php学习】array_map,array_walk,array_filter的区别

    array_map(function($v){return $v+1;}, $array); array_walk($array, function($v, $k){...}); array_filt ...

  2. php的异步处理

    在PHP Web程序中,发送手机短信.电子邮件.转换视频格式.记录日志.数据挖掘采集等,都是比较耗时的操作. 为了增强用户体验,需要将这些操作转为异步执行 PHP Web程序中的短耗时异步处理   前 ...

  3. linux实现c多进程

    线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的Unix也支持线程的概念,但是在一个进程(process)中只允许 ...

  4. 创建数据库指定路径sql

    create database stuDB on  primary  -- 默认就属于primary文件组,可省略(/*--数据文件的具体描述--*/    name='stuDB_data',  - ...

  5. C++省略参数(va_list va_start va_arg va_end)的简单应用

    原文参考自:http://www.cnblogs.com/hanyonglu/archive/2011/05/07/2039916.html #include <iostream> #in ...

  6. php--sphinx的使用

    sphinx安装,配置,使用,分页 Sphinx简介 SQL   结构化查询语言(是一种标准,所有的关系型数据库Mysql,sqlserver,oracle) sphinx的使用两种方式: 第一种: ...

  7. Windows搭建Cocos2d-JS环境

    目录 安装Python Cocos2d-JS框架 开发工具(WebStorm / Cocos Code IDE) 用Webstorm查看官方实例 使用Cocos Code IDE创建工程 1.安装Py ...

  8. JQuery事件的链式写法

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  9. JS事件分析

    1.注册事件 1.1 使用HTML元素的事件属性 <div id='myDiv' style="width:100px;height:100px;background-color:re ...

  10. JMeter学习-006-Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002 解决办法(windows 7)

    好久没用 JMeter 了,今天启动的时候,发现启动命令行窗口出现了警报,警告信息如下图所示: