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. UISearchBar cover first cell of UITableView

    1.相当重要的是 tableView.tableHeaderView = searchBar; 这一句一定要在 UIViewController viewDidLoad 的时候执行,否则就会出现 se ...

  2. Solr4+IKAnalyzer的安装配置

    一.下载Solr4.10.2 我们以Windows版本为例,solr-4.10.2.zip是目前最新版本,下载地址: http://www.apache.org/dyn/closer.cgi/luce ...

  3. [LeetCode] Combination Sum (bfs)

    Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C wher ...

  4. ArcGIS Engine开发之旅02--ArcGIS Engine中的类库

    原文:ArcGIS Engine开发之旅02--ArcGIS Engine中的类库 System类库 System类库是ArcGIS体系结构中最底层的类库.System类库包含给构成ArcGIS的其他 ...

  5. 实验 snort安装配置与规则编写

    1 实验目的 在linux或windows任意一个平台下完成snort的安装,使snort工作在NIDS模式下,并编写符合相关情景要求的snort规则. 2 实验环境 物理机:windows 8.1 ...

  6. [LeetCode]题解(python):104 Maximum Depth of Binary Tree

    题目来源 https://leetcode.com/problems/maximum-depth-of-binary-tree/ Given a binary tree, find its maxim ...

  7. 【C++】C++求vector中的最大最小值

    利用algorithm库里的max_element和min_element可以得到vector的最大最小值,配合distance函数可以得到最大值的位置 #include<vector> ...

  8. Windows-007-进程相关命令(netstat、tasklist、taskkill、tskill)实战实例图文详解

    本节主要讲述 Windows 系统下,nestat.tasklist.tskill 三个 CMD 命令的参数,及使用方法:以及如何利用三者结合查看进程信息和结束进程.敬请亲们参阅,希望能对亲们有所帮助 ...

  9. C语言命名空间

    //首先要认识到命名空间的使用条件.#include <stdio.h> typedef struct A { int A; } A; typedef union B { int A; } ...

  10. Java静态代码分析工具——FindBugs插件的安装与使用

    1 什么是FindBugs FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题.有了静态分析工具,就可以在不实际运行程序的情况对软件进行分 ...