Dom4j解析xml文件

dom4j是一个Java的XML API,类似于jdom,用来读取的XML文件,由于它是将文件解析完存放在内存当中的,所以不适合解析大的XML文件,但就方便性和性能方面,一定程度要优于JDK中Domcument和SAX解析的。下面我就用dom4j来对xml文件进行遍历,感兴趣的同学可以看一下,注释很详细

被解析的XML文件studentInfo.xml

<?xml version="1.0" encoding="UTF-8"?>

<school>

	<college name="云计算">
		<class name="1410A" classroom="36306">
			<student>
				<property name="name" value="张三"></property>
				<property name="age" value="23"></property>
				<property name="garden" value="男"></property>
			</student>
			<student>
				<property name="name" value="李四"></property>
				<property name="age" value="22"></property>
				<property name="garden" value="女"></property>
			</student>
			<student>
				<property name="name" value="王五"></property>
				<property name="age" value="24"></property>
				<property name="garden" value="男"></property>
			</student>
		</class>
	</college>

	<college name="传媒">
		<class name="1408C" classroom="35108">
			<student>
				<property name="name" value="小明"></property>
				<property name="age" value="21"></property>
				<property name="garden" value="男"></property>
			</student>
			<student>
				<property name="name" value="小宇"></property>
				<property name="age" value="22"></property>
				<property name="garden" value="男"></property>
			</student>
			<student>
				<property name="name" value="小张"></property>
				<property name="age" value="25"></property>
				<property name="garden" value="男"></property>
			</student>
			<student>
				<property name="name" value="小红"></property>
				<property name="age" value="20"></property>
				<property name="garden" value="女"></property>
			</student>
		</class>
	</college>

</school>

  首先创建File,获取到根节点

	/**
	 * 功能:获取文件的document对象,然后获取对应的根节点
	 * 作者:茹子赫
	 * 时间:2016年12月6日 上午9:30:38
	 */
	@Test
	public void testGetRoot() throws Exception{

		//获取读取xml方式
		SAXReader reader = new SAXReader();
		
		//找到xml文件位置
		File file = new File("studentInfo.xml");
		
		//读取文档并存入到document中,如果文档无节点,则会抛出Exception提前结束  
		Document document = reader.read(file);
		
		//获取根节点
		Element root = document.getRootElement();
		
		//从根节点遍历所有子节点
		this.getNodes(root);
	}

  

 从根节点开始,递归遍历所有节点和属性

     /**
	 * 功能:递归遍历所有子节点
	 * 作者:茹子赫
	 * 时间:2016年12月6日 上午9:31:13
	 */
	public void getNodes(Element node){
		
		System.out.println("------------------------");
		
		System.out.println("当前节点名称:"+node.getName());
		System.out.println("节点的内容:"+node.getTextTrim());
		
		//所有节点  List
		List<Attribute> listAttr = node.attributes();
		
		//遍历所有节点的所有属性
		for(Attribute attr : listAttr){
			
			//属性的名称
			String name = attr.getName();
			
			//属性的值
			String value = attr.getValue();
			
			System.out.println("属性名称:"+name+" 属性值:"+value);
		}
		
		//递归遍历当前节点所有的子节点  
		List<Element> listElement = node.elements();
		
		//遍历所有一级子节点
		for(Element e : listElement){
			this.getNodes(e);
		}
	}

  部分输出结果

------------------------
当前节点名称:school
节点的内容:
------------------------
当前节点名称:college
节点的内容:
属性名称:name 属性值:云计算
------------------------
当前节点名称:class
节点的内容:
属性名称:name 属性值:1410A
属性名称:classroom 属性值:36306
------------------------
当前节点名称:student
节点的内容:
------------------------
当前节点名称:property
节点的内容:
属性名称:name 属性值:name
属性名称:value 属性值:张三
------------------------
当前节点名称:property
节点的内容:
属性名称:name 属性值:age
属性名称:value 属性值:23
------------------------
当前节点名称:property
节点的内容:
属性名称:name 属性值:garden
属性名称:value 属性值:男
------------------------
当前节点名称:student
节点的内容:
------------------------
当前节点名称:property
节点的内容:
属性名称:name 属性值:name
属性名称:value 属性值:李四
------------------------
当前节点名称:property
节点的内容:
属性名称:name 属性值:age
属性名称:value 属性值:22
------------------------
当前节点名称:property
节点的内容:
属性名称:name 属性值:garden
属性名称:value 属性值:女
------------------------

  其中我们也要用到dom4j-1.6.1.jar包

 

posted @ 2016-12-06 10:16  小学生编程之手  阅读(152)  评论(0编辑  收藏  举报