Jaxb实现Java对象与XML之间的转换
来源:互联网 发布:java金字塔代码 编辑:程序博客网 时间:2024/04/30 21:48
Jaxb核心代码:
package ie.swing.xml.parse;import ie.swing.xml.model.Components;import java.io.File;import java.io.FileNotFoundException;import java.io.OutputStream;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBElement;import javax.xml.bind.JAXBException;import javax.xml.bind.Marshaller;import javax.xml.bind.Unmarshaller;/** * 组件配置文件解析 * * @author lile * */public class ComponentAnalysis {/**根据schema文件生成Java类的命令:xjc.bat -classpath . ie/swing/config/component-1.0.xsd *//** * XML to Java * @param packageName 包名, 如 ie.swing.xml.model * @param xmlPath 要解析的xml文件路径 如 "src/ie/swing/config/component.xml" * @return rootObject 根对象 * @throws JAXBException * @throws FileNotFoundException */public <T> T xml2Java(String packageName, String xmlPath) throws JAXBException, FileNotFoundException {JAXBContext context = JAXBContext.newInstance(packageName); Unmarshaller unmarshaller = context.createUnmarshaller(); File file = new File(xmlPath); @SuppressWarnings("unchecked")JAXBElement<T> rootElement = (JAXBElement<T>) unmarshaller.unmarshal(file); T rootObject = rootElement.getValue(); return rootObject;}/** * Java to XML * @param rootObject 根对象, Xml 根标签对应的对象 * @param out 输出流,该方法将xml数据写入该输出流 * @throws JAXBException */public <T> void java2XML(T rootObject, OutputStream out) throws JAXBException {JAXBContext context = JAXBContext.newInstance(rootObject.getClass());Marshaller marshaller = context.createMarshaller();marshaller.setProperty(Marshaller.JAXB_ENCODING, "utf-8"); // 编码格式marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // 是否格式化生成的xml串marshaller.setProperty(Marshaller.JAXB_FRAGMENT, false); // 是否省略xml头信息marshaller.marshal(rootObject, out);}/** * 测试运行 * @param args * @throws FileNotFoundException * @throws JAXBException */public static void main(String[] args) throws FileNotFoundException, JAXBException {ComponentAnalysis ca = new ComponentAnalysis();//将Xml解析成Java对象Components cps = ca.xml2Java("ie.swing.xml.model", "src/ie/swing/config/component.xml");//将解析出的Java对象cps解析回Xml并输出到System.outca.java2XML(cps, System.out);}}
示例xsd schema文件 component-1.0.xsd:
<?xml version="1.0" encoding="UTF-8"?><schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" targetNamespace="http://www.ie168.org/component-1.0" xmlns:tns="http://www.ie168.org/component-1.0" elementFormDefault="qualified"> <element name="components" type="tns:components"></element> <complexType name="components"> <sequence> <element ref="tns:component" maxOccurs="unbounded" minOccurs="1"></element> </sequence> </complexType> <element name="component" type="tns:component"></element> <complexType name="component"> <sequence> <element ref="tns:rectangle" maxOccurs="unbounded" minOccurs="0"></element> <element ref="tns:ellipse" maxOccurs="unbounded" minOccurs="0"></element> </sequence> <attribute name="name" type="string"></attribute> <attribute name="text" type="string"></attribute> </complexType> <element name="rectangle" type="tns:rectangle"></element> <complexType name="rectangle"> <attribute name="width" type="float"></attribute> <attribute name="height" type="float"></attribute> <attributeGroup ref="tns:point"></attributeGroup> </complexType> <element name="ellipse" type="tns:ellipse"></element> <complexType name="ellipse"> <attribute name="startAngle" type="float"></attribute> <attribute name="arcAngle" type="float"></attribute> <attribute name="width" type="float"></attribute> <attribute name="height" type="float"></attribute> <attributeGroup ref="tns:point"></attributeGroup> </complexType> <attributeGroup name="point"> <attribute name="x" type="float"></attribute> <attribute name="y" type="float"></attribute> </attributeGroup></schema>
示例xml文件: component.xml
<?xml version="1.0" encoding="utf-8" ?><ie:components xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ie="http://www.ie168.org/component-1.0" xsi:schemaLocation="http://www.ie168.org/component-1.0 component-1.0.xsd"><ie:component name="rectangle" text="矩形"><ie:rectangle height="100" width="100" x="0" y="0"/></ie:component><ie:component name="ellipse" text="椭圆"><ie:ellipse arcAngle="360" startAngle="0" height="100" width="100" x="0" y="0"/></ie:component></ie:components>
运行之前先用JDK自带的命令:
xjc.bat -classpath . 包名/component-1.0.xsd
根据schema文件生成对应的Java类
- Jaxb实现Java对象与XML之间的转换
- xml-xml与java对象之间的转换(jaxb)
- JAXB 实现java对象与xml之间互相转换(一)
- JAXB 实现java对象与xml之间互相转换(二)
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB实现JAVA BEAN与XML之间的转换
- JAXB 可以实现Java对象与XML的相互转换
- JAXB 对象与XML之间转换
- JAXB实现xml与java对象的
- java对象和xml之间转换--Jaxb
- [转载] JAXB中Java对象跟XML之间的转换
- linux Makefile浅析
- 七夕情书之恋恋红尘
- 整理之c++笔试
- Spring---->Bean的作用域
- MSP430F14X讲义----ADC
- Jaxb实现Java对象与XML之间的转换
- Drupal 7 Ajax 应用
- 程序员最重要的素质
- 那年,那场青春繁华梦
- 【js特效】一款不错的翻牌或书角效果
- 如何在远程的时候取得自己本地的文件
- 函数前置条件和后置条件
- hadoop简介
- 那些应该记住的