转:jaxb解析xml为对象例子
原文http://weareold.iteye.com/blog/708543
通过jaxb方式把xml文件映射成bean对象。
1、新建java工程或者web工程都可以。
2、通过精简必须导入jar包
activation.jar
jaxb-api-2.0.jar
jaxb-impl-2.0.1.jar
jsr173_api-1.0.jar
3、 新建xml文件
<?xml version="1.0" encoding="UTF-8"?>
<root>
<template
start="true"
ip="127.0.0.1"
port="3344"
server="server"
/>
<template ... ... />
</root>
4、新建bean对象,xml的映射文件。
Vo.java 如下
import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { }) @XmlRootElement(name = "[color=red]template[/color]") public class Vo { @XmlAttribute private String start; @XmlAttribute private String ip; @XmlAttribute private String port; @XmlAttribute private String server; public String getStart() { return start; } public void setStart(String start) { this.start = start; } public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public String getPort() { return port; } public void setPort(String port) { this.port = port; } public String getServer() { return server; } public void setServer(String server) { this.server = server; } }
import java.util.ArrayList; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { }) @XmlRootElement(name = "[color=blue]root[/color]") public class Root { protected List<Vo> [color=red]template[/color]; public List<Vo> getTemplateList() { if (template == null) { template = new ArrayList<Vo>(); } return this.template; } }
public static void gernateConfig() throws Exception{ StringBuffer buffer = null; JAXBContext jaxbContext; try { //读入xml文件流 InputStream is = Excecute.class.getResourceAsStream(“/conf/config.xml”); BufferedReader in = new BufferedReader(new InputStreamReader(is)); buffer = new StringBuffer(); String line = ""; while ((line = in.readLine()) != null) { buffer.append(line); } //加载映射bean类 jaxbContext = JAXBContext.newInstance(Root.class); //创建解析 Unmarshaller um = jaxbContext.createUnmarshaller(); StreamSource streamSource = new StreamSource(new StringReader(buffer.toString())); Root root = (Root) um.unmarshal(streamSource); } catch (Exception e) { e.printStackTrace(); throw new Exception(e.getMessage()); } }
public static String gernateConfigXml(Root root) throws Exception { if (root != null) { try { JAXBContext context = JAXBContext.newInstance(Root.class); Marshaller m = context.createMarshaller(); m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); Writer writer = new StringWriter(); m.marshal(root, writer); try { String xml = writer.toString(); writer.flush(); writer.close(); return xml; } catch (IOException e) { return ""; } } catch (Exception e) { throw new Exception("失败!"); } } else { return null; } }