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获得文件夹下所有文件的递归算法

    function my_scandir($dir){ $files=array(); if(is_dir($dir)) { if($handle=opendir($dir)) { while(($fi ...

  2. const与#define宏常量 , inline与#define

    1.预处理 预处理器是在真正的编译开始之前由编译器调用的独立程序.预处理器可以删除注释.包含其他文件以及执行宏替代. 预处理命令(宏定义#define..#undef. 文件包含#include. 条 ...

  3. [LeetCode]题解(python):040-Combination Sum II

    题目来源 https://leetcode.com/problems/combination-sum-ii/ Given a collection of candidate numbers (C) a ...

  4. 【python PIL学习】给照片打水印

    不知道别人是怎么做的,闲着无聊就根据前几天看到的一些PIL里面的函数,写了这个小程序,经过测试,基本可以给所有像宽400以上的图片打上从左下到右上的看上去质量尚可的水印,更小的图片水印偏下.写完觉得很 ...

  5. Swift-11-委托模式

    委托是一种设计模式,它允许类或者结构体将一些需要它们负责的功能交由(或委托)给其他的类型的实例.委托模式很简单:定义协议来封装那些需要被委托的函数和方法,使其遵循者拥有这些被委托的函数和方法.委托模式 ...

  6. Selenium2学习-019-WebUI自动化实战实例-017-获取浏览器类型

    Web UI 自动化脚本分布执行过程中有时候需要获取浏览器的相关信息,此文给出了一个简略获取浏览器类型的方法,敬请各位小主们参阅.若有不足之处,敬请大神指正,不胜感激! 闲话少述,上码. /** * ...

  7. php Memcache

    <?php $mem = new Memcache();//实例化一个对象 $mem->connect("localhost",11211);//连接memcache服 ...

  8. MySQL 事件跟踪器 , MySQL 无须重启服务 跟踪 SQL , 也无须配置日志

    第一步 创建以下两个 日志表 按 Ctrl+C 复制代码 按 Ctrl+C 复制代码 CREATE TABLE `general_log` ( `event_time` timestamp NOT N ...

  9. Python模块(json)

    json json模块,用来处理json风格的数据 一.json的数据格式 json是javascripts的标准格式,json的格式是由若干个 键/值(key,values) 对的集合,该集合可以理 ...

  10. [转载]如何破解Excel VBA密码

    原文链接:http://yhf8377.blog.163.com/blog/static/1768601772012102111032840/ 在此之前,先强调一下,这个方法只是用来破解Excel内部 ...