JAVA SE学习day14:解析XML

XML解析有两种方式:SAX,DOM

SAX:simple api for xml,解析XML的简单API,特点是内存占用少,速度快,但由于是逐行扫描式解析,对整体结构没有把控,不能修改XML内容
*
DOM:document object model,文档对象模型。特点是解析XML时会将XML结构建成 一棵树然后通过遍历树的形式解析xml内容,由于对整体结构有把控,可修改XML内容,但是由于会内建整棵树,因此内存占用多,速度慢。
W3C推荐使用DOM解析
*

  • DOM4J dom for java
使用dom解析XML的步骤

1.创建SAXReader
2.使用SAXReader读取XML文档并生成Document对象(内建树的过程)
3.获取根元素
4.通过根元素开始按照XML的结构逐级获取子元素以达到遍历XML的目的

public class ParseXmlDemo {

	public static void main(String[] args) {
		/*
		 * 使用dom解析XML的步骤
		 * 1.创建SAXReader
		 * 2.使用SAXReader读取XML文档并生成Document对象(内建树的过程)
		 * 3.获取根元素
		 * 4.通过根元素开始按照XML的结构逐级获取子元素以达到遍历XML的目的
		 */
		try{
			//1
			SAXReader reader = new SAXReader();
			//2
			Document doc = reader.read(new File("./emplist.xml"));
			/*3获取根元素
			 * Element 类的每一个实例用于表示XML文档中的一个元素(一堆标签)
			 * 通过Element可以获取表示的这对标签的相关信息,常有操作:
			 * 
			 * String geyName()
			 * 获取当前标签的名字
			 * 
			 * String getText()
			 * 获取当前标签中的文本
			 * 
			 * Element element(String name)
			 * 获取当前标签下指定名字的子标签
			 * 
			 * List elements()
			 * 获取当前标签下的所有子标签
			 * 
			 * List element(String name)
			 * 获取当前标签下的所有同名子标签(指定的名字)
			 */
			Element root = doc.getRootElement();
			System.out.println(root.getName());//输出根标签的名字
			/*
			 * 将emplist.xml文件中的所有员工信息读取出来并存入一个集合
			 */
			List<Emp> emplist = new ArrayList<>();
			
			//从List标签下获取所有的emp标签
			List<Element>list = root.elements("emp");
			System.out.println(list.size());
			//遍历每一个<emp>标签
			for(Element e:list){
				//获取该员工的名字
				//1.先获取<emp>标签下名为<name>的子标签
				Element nameEle = e.element("name");
				//2.获取标签中间文本
				String name = nameEle.getTextTrim();
				System.out.println(name);
				
				//获取年龄
				int age = Integer.parseInt(
//						e.element("age").getTextTrim()
				//elementTextTrim方法是获取当前标签下指定名字子标签中间的文本
						e.elementTextTrim("age")
				);
				System.out.println(age);
				//获取性别
				String gender = e.elementTextTrim("gender");
				//获取工资
				int salary  = Integer.parseInt(
						e.elementTextTrim("salary")
				);
				//获取<emp>标签中的属性id的值
//				Attribute attr = e.attribute("id");
//				int id = Integer.parseInt(
//						attr.getValue()
//				);
//				int id = Integer.parseInt(e.attribute("id").getValue());
				//attributeValue方法用来获取当前标签下指定名字的属性对应的值
				int id = Integer.parseInt(
						e.attributeValue("id")
				);
				
				
				Emp emp = new Emp(id,name,age,gender,salary);
				emplist.add(emp);
			}
			System.out.println("解析完毕");
			for(Emp e:emplist){
				System.out.println(e);
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		
		
		
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值