xml文件的jdom解析


jdom解析xml,是基于树型结构,其利用的是纯java技术,实现对xml文档的各种操作。jdom可以说是直接为java编程服务的,把sax与dom的功能有效的结合起来。
由于jdom致力于隐藏解析xml的复杂性,因此用jdom解析xml就和java new一个新的对象一般,操作也是非常容易的。在jdom中,xml本身就是一个Document实例,每一个元素标签则为Element实例,属性则为Attribute实例,通过这些对象,对xml的操作会显得格外的简单。
使用jdom要下载jdom的开发包:jdom-jar下载地址: http://www.jdom.org/dist/binary/
将jdom.jar加入到工程目录中。
下面是一个person.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<persons>
	<person id="328">
		<name>zhangsan</name>
		<age>23</age>
	</person>
	<person id="303">
		<name>lisi</name>
		<age>22</age>
	</person>
</persons>

将解析出来的对象封装成Person对象,以下是Person类:
public class Person {
	private int id;
	private String name;
	private int age;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + id;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Person other = (Person) obj;
		if (age != other.age)
			return false;
		if (id != other.id)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
	}

	public Person(int id, String name, int age) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
	}

	public Person() {
		super();
	}
}

使用JDom来解析person.xml:
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;

public class JDomTest {
	public static void main(String[] args) {
		//创建解析器对象
		SAXBuilder builder = new SAXBuilder();
		//获取xml输入流
		InputStream in = JDomTest.class.getClassLoader().getResourceAsStream(
				"person.xml");
		try {
			//获得代表整个xml的Document对象
			Document document = builder.build(in);
			//获取根结点<persons>
			Element root = document.getRootElement();
			//获取根结点下的子结点<person>集合
			List<Element> list = root.getChildren();
			
			ArrayList<Person> persons = new ArrayList<Person>();
			Person person = null;
			//遍历<person>对应数据内容,将数据封装成Person对象后,放入集合中
			for (Element e : list) {
				person = new Person();
				//获取当前<person>结点的属性对象,并得到id的值
				Attribute idAtt = e.getAttribute("id");
				person.setId(idAtt.getIntValue());
				//获取<person>的子结点集合
				List<Element> childlist = e.getChildren();
				//遍历集合,获取name与age的值
				for (Element ce : childlist) {
					if ("name".equals(ce.getName())) {
						String name = ce.getText();
						person.setName(name);
					}
					if ("age".equals(ce.getName())) {
						String age = ce.getText();
						person.setAge(Integer.valueOf(age));
					}
				}
				//完成一次<person>遍历后,将获取的Person对象存入集合中。
				persons.add(person);
				person = null;
			}
			//完成数据读取,打印调试。
			printList(persons);
		} catch (JDOMException | IOException e) {
			e.printStackTrace();
		}
	}
	//用于打印集合。
	public static void printList(ArrayList<Person> persons) {
		for (Person p : persons) {
			System.out.println(p);
		}
	}
}


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值