JAXB方式读写xml实例

<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();
		}
	}
}


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JAXBJava Architecture for XML Binding)是Java中用于将XML文档与Java对象之间进行映射的技术。它提供了一种简单的方式来将XML数据转换为Java对象,以及将Java对象转换为XML数据。 下面是使用JAXB解析XML的基本步骤: 1. 创建一个Java类,该类将作为XML数据的映射对象。该类需要使用JAXB注解来指定XML元素和属性与Java字段之间的映射关系。 2. 使用JAXB的上下文(JAXBContext)创建一个Unmarshaller对象,用于将XML数据转换为Java对象。 3. 调用Unmarshaller对象的unmarshal()方法,传入XML数据的来源(可以是文件、输入流等),将XML数据解析Java对象。 下面是一个简单的示例代码,演示了如何使用JAXB解析XML: ```java import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import java.io.File; public class JAXBExample { public static void main(String[] args) { try { // 创建JAXB上下文 JAXBContext jaxbContext = JAXBContext.newInstance(Person.class); // 创建Unmarshaller Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); // 加载XML文件 File xmlFile = new File("person.xml"); // 解析XML并将其转换为Java对象 Person person = (Person) unmarshaller.unmarshal(xmlFile); // 打印Java对象的属性 System.out.println("Name: " + person.getName()); System.out.println("Age: " + person.getAge()); } catch (JAXBException e) { e.printStackTrace(); } } } ``` 在上面的示例中,我们创建了一个名为Person的Java类,并使用JAXB注解指定了XML元素与Java字段之间的映射关系。然后,我们使用JAXBContext创建了一个Unmarshaller对象,并将XML文件解析为Person对象。最后,我们打印了Person对象的属性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值