您的位置:首页 > 其它

浅谈XML 解析技术(五) Jaxb解析

2015-10-29 15:24 471 查看
1.【项目包结构如图】 bean 目录下的bean是由xjc 命令根据xsd 文件生成的对象,具体反转方法参见笔者的另一篇博客:xml--> javabean



【2. students_jaxb.xml】

<?xml version="1.0" encoding="UTF-8"?>
<Students>
<Student grade="2">
<Name>zong_0</Name>
<Age>20</Age>
<Sex>boy</Sex>
<Number>1000</Number>
<Address>beijing No.0</Address>
</Student>
<Student grade="1">
<Name>zong_1</Name>
<Age>21</Age>
<Sex>girl</Sex>
<Number>1001</Number>
<Address>beijing No.1</Address>
</Student>
<Student grade="2">
<Name>zong_2</Name>
<Age>22</Age>
<Sex>boy</Sex>
<Number>1002</Number>
<Address>beijing No.2</Address>
</Student>
<Student grade="1">
<Name>zong_3</Name>
<Age>23</Age>
<Sex>girl</Sex>
<Number>1003</Number>
<Address>beijing No.3</Address>
</Student>
<Student grade="2">
<Name>zong_4</Name>
<Age>24</Age>
<Sex>boy</Sex>
<Number>1004</Number>
<Address>beijing No.4</Address>
</Student>
<Student grade="1">
<Name>zong_5</Name>
<Age>25</Age>
<Sex>girl</Sex>
<Number>1005</Number>
<Address>beijing No.5</Address>
</Student>
<Student grade="2">
<Name>zong_6</Name>
<Age>26</Age>
<Sex>boy</Sex>
<Number>1006</Number>
<Address>beijing No.6</Address>
</Student>
<Student grade="1">
<Name>zong_7</Name>
<Age>27</Age>
<Sex>girl</Sex>
<Number>1007</Number>
<Address>beijing No.7</Address>
</Student>
<Student grade="2">
<Name>zong_8</Name>
<Age>28</Age>
<Sex>boy</Sex>
<Number>1008</Number>
<Address>beijing No.8</Address>
</Student>
<Student grade="1">
<Name>zong_9</Name>
<Age>29</Age>
<Sex>girl</Sex>
<Number>1009</Number>
<Address>beijing No.9</Address>
</Student>
</Students>


【2. JaxbUtils: jaxb 解析工具类】

package org.zgf.xml.jaxb;
import java.io.ByteArrayInputStream;
import java.io.StringWriter;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

/**
* @Description: xml 解析工具类
* @author zonggf
* @date 2015年10月29日-下午1:27:08
*/
public class JaxbUtlis
{
private static String ENCODING = "UTF-8";

private static void setENCODING(String encoding){
ENCODING = encoding;
}

/**
* @Description  将xml 文件转换成对象
* @param xml	xml片段
* @param T	要转换的对象类名称
* @return T
* @author zonggf
* @date 2015年10月29日-下午1:27:48
*/
@SuppressWarnings("unchecked")
public static <T> T unmarshall(String xml, Class<T> T)
{
try  {
JAXBContext jaxbContext = JAXBContext.newInstance(T);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

T re = (T) unmarshaller.unmarshal(new ByteArrayInputStream(xml.getBytes(ENCODING)));
return re;

}
catch (Exception ex)  {
ex.printStackTrace();
}
return null;
}

/**
* @Description	javaBean 对象转换成xml字符串
* @param obj 要转换的JavaBean对象
* @return String
* @author zonggf
* @date 2015年10月29日-下午1:28:26
*/
public static String marshall(Object obj)
{
try {
JAXBContext jaxbContext = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, ENCODING);
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE);
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);

StringWriter stringWriter = new StringWriter();
marshaller.marshal(obj, stringWriter);
return stringWriter.toString();
}
catch (Exception ex)  {
ex.printStackTrace();
}
return null;
}

}


【3. JaxbParseXml】

package org.zgf.xml.jaxb;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;
import org.zgf.util.FileTextUtil;
import org.zgf.xml.jaxb.bean.Student;
import org.zgf.xml.jaxb.bean.Students;
/**
* @Description:   将 xml 文档转换成javabean 对象
* @author zonggf
* @date 2015年10月29日-下午1:44:15
*/
public class JaxbParseXml {

private static String fileName = "xml/students_jaxb.xml";

/** 初始化studentList 对象 */
private static List<Student> initStudents() {
List<Student> students = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Student student = new Student();
student.setNumber("100" + i);
student.setName("zong_" + i);
student.setAge("" + (20 + i));
if (i % 2 == 0) {
student.setGrade("2");
student.setSex("boy");
} else {
student.setGrade("1");
student.setSex("girl");
}
student.setAddress("beijing No." + i);
students.add(student);
}
return students;
}

/** 测试生成xml  */
@Test
public void test_createXMLFile(){
Students students = new Students();
students.setStudent(initStudents());

String xmlContent = JaxbUtlis.marshall(students);

String xmlHeader = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
//写入文件
FileTextUtil.string2File(fileName, xmlHeader + xmlContent);
System.out.println("finish...");
}

/** 测试读取xml */
@Test
public void test_readXMLFile() {
String xmlStr = FileTextUtil.txtFile2String(fileName);

Students students = JaxbUtlis.unmarshall(xmlStr, Students.class);

List<Student> studentList = students.getStudent();
for (Student student : studentList) {
System.out.println(student);
}
}

}


【注:源代码下载
D_parse_xml.zip】
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: