解析XML的简单操作

本文介绍了XML的基本概念及其与HTML的区别,重点讲解了XML的DOM解析方式,包括如何使用DOM读取XML文件,获取元素信息,并通过示例代码展示了如何创建Emp对象列表。此外,还演示了如何将读取的数据写回XML文件,实现数据的读写操作。
摘要由CSDN通过智能技术生成

一. 前言

又有很长时间没有用xml了,趁着有点时间,把xml的解析又过了一遍,这里就一下,再加深一下印象。本文只是介绍xml基本的解析方式。

二. XML

XML 叫做可扩展标记语言。被用来传输和存储数据。是一个纯文本。
看到XML,是否都会想起HTML,不要搞混了,他们不是一个替代关系,而是各有不同。
XML 主要用于传输和存储数据,针对的是数据的内容。HTML是超文本标记语言,主要用于显示数据,针对的是数据的外观。他们虽然都是标记语言,但是XML的标记是自定义的,而HTML的都是规定好了的。

三. XML的解析

解析即为获取信息。
XML的解析基本分为两类,一种是SAX解析,一直是DOM解析。
SAX(Simple API for XML)是基于事件流的解析;
DOM(Document Object Model)是基于XML 文档树结构的解析。
SAX: 效率高,数据量小,仅一次获取,不能修改
DOM: 整颗树加载到内存中,耗内存,可多次获取,可修改
本文将使用DOM的方式进行记录。

四. 读取XML

这里就直接记录XML的读取操作了,XML的基本知识点,如元素,根元素,属性,子元素,开闭标签等内容,就不再赘述了
读取XML即在程序中读取XML文件,这里会用到SAXReader类,该类在dom4j的jar包中,因此需要导入该包。
具体代码如下:
实体类emp

public class Emp {
	public String id;
	public String name;
	public String age;
	public String gender;
	public String salary;
	public String getName() {
		return name;
	}
	public String getAge() {
		return age;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getGender() {
		return gender;
	}
	public String getSalary() {
		return salary;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public void setSalary(String salary) {
		this.salary = salary;
	}
	@Override
	public String toString() {
		return "Emp [id=" + id + ", name=" + name + ", age=" + age + ", gender=" + gender + ", salary=" + salary + "]";
	}
	public Emp() {
		super();
	}
	public Emp(String id, String name, String age, String gender, String salary) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
		this.gender = gender;
		this.salary = salary;
	}
	
	
	
}

读取xml

public class ReadXml {
	public static void main(String[] args) {
		try {
			SAXReader reader = new SAXReader();
			Document document = reader.read(new FileInputStream("emps.xml"));
			//获取根元素
			Element root = document.getRootElement();
			//存储xml的内容信息
			List<Emp> emplist = new ArrayList<Emp>();
			Emp emp = null;
			//获取所有的emp
			List<Element> emps = root.elements();
			//循环获取每一个emp标签的子标签内容及属性,并存入集合中
			for(Element e:emps){
				String id = e.attributeValue("id");
				String name = e.element("name").getTextTrim();
				String age = e.elementTextTrim("age");
				String gender = e.elementTextTrim("gender");
				String salary = e.elementTextTrim("salary");
				emp = new Emp(id,name,age,gender,salary);
				emplist.add(emp);
			}
			
			System.out.println(emplist);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

我的emps.xml文件是放在根目录下的,因此此处直接这么写的。
输出结果如下:

[Emp [id=10002, name=张三, age=18, gender=男, salary=8000], Emp [id=10004, name=李四, age=19, gender=女, salary=9000], Emp [id=10005, name=王五, age=22, gender=男, salary=5000], Emp [id=10009, name=赵六, age=20, gender=女, salary=18000]]

五. 写出XML

因为本程序没有连接数据库,因此,此处将上面读取的操作再写了一次,将获取到的值写出到XML中。

public class WriteXml {
	public static void main(String[] args) {
		//获取xml信息
		List<Emp> emplist = new ArrayList<Emp>();
		try {
			SAXReader reader = new SAXReader();
			Document rdocument = reader.read(new FileInputStream("emps.xml"));
			Element root = rdocument.getRootElement();
			List<Element> emps = root.elements("emp");
			Emp emp = null;
			for(Element e :emps){
				String id = e.attributeValue("id");
				String name = e.elementTextTrim("name");
				String age = e.elementTextTrim("age");
				String gender = e.elementTextTrim("gender");
				String salary = e.elementTextTrim("salary");
				emp = new Emp(id,name,age,gender,salary);
				emplist.add(emp);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		
		//写出xml信息
		Document document = DocumentHelper.createDocument();
		Element root = document.addElement("grades");
		Element classs =root.addElement("classs");
		classs.addAttribute("id", "1");
		
		for(Emp e : emplist){
			Element student = classs.addElement("student");
			student.addAttribute("id", e.getId());
			student.addElement("name").addText(e.getName());
			student.addElement("age").addText(e.getAge());
			student.addElement("gender").addText(e.getGender());
			student.addElement("salary").addText(e.getSalary());
		}
		XMLWriter writer = null;
		try {
			FileOutputStream out = new FileOutputStream("grades.xml");
			writer = new XMLWriter(out, OutputFormat.createPrettyPrint());
			writer.write(document);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				writer.close();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
		}
		System.out.println("写出完毕!");
	}
}

六. 总结

本篇内容简单,只是基本的操作xml文件,仅作记录,以供翻阅,因为现在总感觉记性不太好,很多简单的东西都记不住了,如有纰漏,望大家告之。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值