使用dom4j解析XML文档

              dom4j是一个易用的、开源的库,可以实现对xml文档的解析,使用起来非常方便。

现在有这样一个简单的xml文档:

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students [
	<!ELEMENT students (student*)>
	<!ELEMENT student (id,name,age)>
	<!ELEMENT id (#PCDATA)>
	<!ELEMENT name (#PCDATA)>
	<!ELEMENT age (#PCDATA)>
	<!ATTLIST student sex (男|女) "男">
]>
<students>
	<student sex="男">
		<id>1</id>
		<name>张三</name>
		<age>20</age>
	</student>
	<student sex="女">
		<id>2</id>
		<name>陈吉吉</name>
		<age>20</age>
	</student>
	<student sex="男">
		<id>3</id>
		<name>李四</name>
		<age>19</age>
	</student>
</students>


下面使用java代码来进行解析:

 

 

package com.wzj.test;

import java.io.File;
import java.io.IOException;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class TestMain {
	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args){
		try {
			//1.获取项目的根路径
			File directory=new File("");
			String path=directory.getCanonicalPath();
			//2.读取xml文件,获取Document对象
			SAXReader reader=new SAXReader();
			Document document=reader.read(new File(path+"/src/Student.xml"));
			//3.获取根节点——即students
			Element root=document.getRootElement();
			//4.获取根节点下的所有名为student的子节点集合
			List<Element> student=root.elements("student");
			//5.遍历每个student元素(对象)
			for (Element item : student) {
				System.out.println("------------------");
				//6.获取节点下的属性(student的sex属性)
				Attribute sex=item.attribute("sex");
				//7.获取属性值(sex的属性值)
				System.out.println("学生性别:"+sex.getText());
				//或者直接这样,里面有很多方法,可以自己查看练习
//				System.out.println("学生姓名:"+item.attributeValue("sex"));
				
				//8.获取节点下的子节点元素(student下的单个节点元素——id)
				Element id=item.element("id");
				//9.获取节点元素的文字(id节点的文本)
				System.out.println("学生编号:"+id.getText());
				//或者直接这样
//				System.out.println(item.elementText("id"));
				
				//10.添加子节点(在student节点下再添加一个address节点)
				Element address=item.addElement("address");
				//11.设置节点文字
				address.setText("地址"+id.getText());
				//12.设置节点属性和属性值
				address.addAttribute("city", "北京");
				//13.删除某节点
//				item.remove(address);
				
				
				
				System.out.println("学生姓名:"+item.elementText("name"));
				System.out.println("学生年龄:"+item.elementText("age"));
				System.out.println("------------------");
			}
			
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}


遍历元素时也可以这样遍历:

 

 

for(Iterator it=student.iterator();it.hasNext();){
				Element e=(Element)it.next();
				//...
			}

遍历某节点下的所有属性:

 

 

for(Iterator it=root.attributeIterator();it.hasNext();){
				Attribute a=(Attribute)it.next();
			}

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值