JAXB方式读写xml实例

来源:互联网 发布:nginx 泛域名配置 编辑:程序博客网 时间:2024/05/16 18:59
<pre class="html" name="code">在工作中遇到了需要读取xml的业务,发现原代码使用的是dom4j,因为这个xml的节点层次比较深,原代码显得杂乱无章,因为我修改了代码使用了jaxb读取xmljaxb 的优势在于他可以以javabean 注入的方式映射到xml,代码干净利落。我写了一个demo,我们先看下xml文件的结构

<ArticleData><article><title>super</title><email>xubing@thunisoft.com</email><date>2016/07/14</date><articleChild><super>super</super></articleChild></article><test>我是test</test><ee></ee></ArticleData>

 

首先 ArticleDate 节点对应的javabean  根节点必须用@XmlRootElement(name="ArticleDate") 这个注入

 

package com.superbing.thunisoft.ajaxb.bean;import java.util.ArrayList;import java.util.List;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement(name="ArticleData")public class ArticleData {private List<Article> article = new ArrayList<Article>();private String test;private String wca;public final String getWca() {return wca;}public final void setWca(String wca) {this.wca = wca;}public final String getTest() {return test;}public final void setTest(String test) {this.test = test;}public final List<Article> getArticle() {return article;}public final void setArticle(List<Article> article) {this.article = article;}}

 

接下来是Article 节点 这里有一个@XmlElement(name="super") 这里 name = super 是一个别名的性质,child这个节点对应的xml里的节点可以叫super 而不是child

package com.superbing.thunisoft.ajaxb.bean;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement;public class ArticleChild {private String child;@XmlElement(name="super")public final String getChild() {return child;}public final void setChild(String child) {this.child = child.trim();}}


最后是 Article 节点

package com.superbing.thunisoft.ajaxb.bean;import java.util.ArrayList;import java.util.List;public class Article {private String title;private String email;private String date;List<ArticleChild>  articleChild = new ArrayList<ArticleChild>();public final List<ArticleChild> getArticleChild() {return articleChild;}public final void setArticleChild(List<ArticleChild> articleChild) {this.articleChild = articleChild;}public final String getTitle() {return title;}public final void setTitle(String title) {this.title = title;}public final String getEmail() {return email;}public final void setEmail(String email) {this.email = email;}public final String getDate() {return date;}public final void setDate(String date) {this.date = date;}}


好了,读取xml的时候到了。  这里的for 循环是为了测试 代码用的。。 下班了拜拜

package com.superbing.thunisoft.ajaxb.xmlread;import java.io.File;import java.util.List;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Unmarshaller;import com.superbing.thunisoft.ajaxb.bean.Article;import com.superbing.thunisoft.ajaxb.bean.ArticleChild;import com.superbing.thunisoft.ajaxb.bean.ArticleData;public class TestAjaxb {public static void main(String[] args) {File xmlFile = new File("C:\\Users\\Administrator\\Desktop\\jaxb.xml");JAXBContext context;try {context = JAXBContext.newInstance(ArticleData.class);Unmarshaller unm = context.createUnmarshaller();ArticleData data = (ArticleData) unm.unmarshal(xmlFile);System.out.println(data.getTest());List<Article> list = data.getArticle();for(Article art:list) {for(ArticleChild cd : art.getArticleChild()){System.out.println(cd.getChild() + "super");}System.out.println(art.getTitle());}} catch (JAXBException e) {e.printStackTrace();}}}


 

0 0