Java: xml转换
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转换的更多相关文章
- Java对象转换成xml对象和Java对象转换成JSON对象
1.把Java对象转换成JSON对象 apache提供的json-lib小工具,它可以方便的使用Java语言来创建JSON字符串.也可以把JavaBean转换成JSON字符串. json-lib的核心 ...
- Java对象和XML转换
有时候,我们需要把Java对象转换成XML文件.这时可以用JAXB来实现.(JDK1.6及以后的版本无需导入依赖包,因为已经包含在JDK里了) 假如某个公司有许多部门,每个部门有许多职员,我们可以这样 ...
- Dom4j把xml转换成Map(非固定格式)
将xml转换成Map,能够应对不用结构的xml,而不是只针对固定格式的xml.转换规则:1.主要是Map与List的互相嵌套2.同名称的节点会被装进List 示例: import java.util. ...
- 【Java】Java XML 技术专题
XML 基础教程 XML 和 Java 技术 Java XML文档模型 JAXP(Java API for XML Parsing) StAX(Streaming API for XML) XJ(XM ...
- 转 JSON与XML转换
这两天处理模块的联调工作,在json与XML转换中出现了一些奇怪的问题,仔细究来,实为对org.json.*包知之太少.晚上baidu.google一下,找出了问题出现的原因.在模块中,使用了两个方法 ...
- 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来 ...
- 如何将 Java 项目转换成 Maven 项目
本文内容 Java 项目 Maven 项目 Java 项目转换成 Maven 项目 本文主要介绍如何将 Java 项目转换成 Maven 项目.首先要明确的是,用 Maven 管理 Java 项目的确 ...
- Maven 学习笔记——将普通的Java项目转换成Maven项目(3)
将一个普通的java项目转换成Maven项目并不是一个很大的任务,仅仅只需要下面的几步就能将转换成功.下面我是用一个简单的Selenium测试小demon作为例子来说的. 移调项目中所有关联的Libr ...
- jsonUtils&&Json、Xml转换工具Jackson使用
1.jsonUtils package com.icil.utils; import java.util.List; import com.fasterxml.jackson.core.JsonPro ...
随机推荐
- href="#"和javasrcript:void(0)的区别
当我们需要一个空链接时,通常有两种方法: <a href="#">这个一个空链接</a> 和 <a href="javascript:voi ...
- 【转】Xamarin.Android 入门之:Xamarin+vs2015 环境搭建
Xamarin.Android 入门之:Xamarin+vs2015 环境搭建 一.前言 此篇博客主要写了如何使用搭建xamarin开发的环境,防止我自己万一哪天电脑重装系统了,可以直接看这篇博客 ...
- 文件对比工具Beyond Compare使用方法
今天向大家介绍一个使用起来十分方便且功能十分强大的文件对比工具-Beyond Compare. 1 工具下载 工具的下载很简单,百度搜索Beyond Compare即可. 下载完成后,解压缩,双 ...
- android判断pad还是手机
第一种. Rect frame = new Rect(); getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); if (fr ...
- LightOj1190 - Sleepwalking(判断点与多边形的位置关系--射线法模板)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1190 题意:给你一个多边形含有n个点:然后又m个查询,每次判断点(x, y)是否在多边 ...
- imx6 启动 init进程
之前不知道imx6内核是怎么启动文件系统的init进程,查了下资料,记录于此,以后再来补充. kernel/init/main.c static noinline int init_post(void ...
- Mybatis的分页插件PageHelper
Mybatis的分页插件PageHelper 项目地址:http://git.oschina.net/free/Mybatis_PageHelper 文档地址:http://git.oschina. ...
- Oracle 如何对时间进行简单加减运算
在我们用dbms_job包进行定时Job的时候,需要设置时间间隔,所以需要知道时间的基本加减方法. SQL> alter session set nls_date_format='yyyy-mm ...
- procps包里面的sysctl命令
procps包里面的sysctl命令 --http://www.cnblogs.com/createyuan/p/3740917.html?utm_source=tuicool&utm_med ...
- VMWare虚拟机下为Ubuntu 12.04.1配置静态IP_转
转自:http://www.cnblogs.com/objectorl/archive/2012/09/27/vmware-ubuntu-nat-static-ip-settings.html 背景在 ...