zoukankan      html  css  js  c++  java
  • 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包

  • 相关阅读:
    使用 python 实现 memcached 的启动服务脚本 rc
    iNeedle系统之国舜项目
    CentOS系统在不重启的情况下为虚拟机添加新硬盘
    Windows下常用软件工具的命令
    dpdk在虚拟机上出错处理
    Linux工具之man手册彩色页设置
    使用VIM插件ctags来阅读C代码
    Linux命令行上传文件到百度网盘
    ng-repeat 的重复问题
    python 启动简单web服务器
  • 原文地址:https://www.cnblogs.com/ruzihe/p/6136499.html
Copyright © 2011-2022 走看看