JAXB方式读写xml实例

本文介绍使用JAXB解析复杂结构的XML文件方法,通过JavaBean实现XML与对象的映射,提供简洁清晰的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<pre class="html" name="code">在工作中遇到了需要读取xml的业务,发现原代码使用的是dom4j,因为这个xml的节点层次比较深,原代码显得杂乱无章,因为我修改了代码使用了jaxb读取xml
jaxb 的优势在于他可以以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();
		}
	}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值