DOM4J的简单介绍

解析XML文件的主流技术包括:DOM、JDOM、SAX和DOM4J;

DOM4J是一个十分优秀的开源框架(易用、开源)。使用比较广泛, SUNJAXM也在用DOM4J Hibernate用它来读写配置文件等。它应用于Java平台,采用了Java集合框架并完全支持DOMSAXJAXPDOM4J的使用非常简单,在使用的过程中,只需要通过查询帮助文档和相关的技术博客即可完成常规的操作。【当XML文档较大且不考虑平台移植性时,建议采用DOM4J

这里简单介绍DOM4J对XML文件内容的解析和对XPath的支持。

1、迭代方式解析XML文件内容及标签属性

private static void readNodes(Element node){
        //首先获取当前节点的所有属性
        List<Attribute> list = node.attributes();
        
        //遍历节点属性  
        for(Attribute attribute : list){  
            System.out.print("\n");  
            System.out.println("属性-"+attribute.getName() +":" + attribute.getValue());  
        }  
        
        //输出当前节点下的内容
        if(!(node.getTextTrim().equals(""))){  
             System.out.println( node.getName() + ":" + node.getText());    
        }  
        
        //迭代当前节点下面的所有子节点  
        Iterator<Element> iterator = node.elementIterator();  
        while(iterator.hasNext()){  
            Element e = iterator.next();  
            readNodes(e);  
        }  
	}
2、对XPath的支持,直接读取指定标签下的值(name和age
 需要引入jaxen-xx-xx.jar,否则会报java.lang.NoClassDefFoundError: org/jaxen/JaxenException异常

	private static void readNodesByXPath(Document document){
		List list = document.selectNodes("/students/student/name");
		for (int i = 0; i < list.size(); i++) {
			Element node = (Element) list.get(i);
			System.out.println(node.getName()+"-"+node.getTextTrim());
		}
		
		System.out.println("----------------------------------------");
		
		List list2 = document.selectNodes("/students/student/age");
		for (int i = 0; i < list2.size(); i++) {
			Element node = (Element) list2.get(i);
			System.out.println(node.getName()+"-"+node.getTextTrim());
		}
		
	}
3、项目中有时会遇到一种情况,要求请求的入参(XML)格式比复杂,但有效的参数就几个
 首先编辑好XML待用,然后读取并添加有效参数即可,接下来以student.xml为例,添加参数

	private static void addAndUpdateXml(Document document) {
		//XPath查找param1和param2节点
		Node node = document.selectSingleNode("/students/student/param1");
		node.setText("1");
		
		Node node2 = document.selectSingleNode("/students/student/param2");
		node2.setText("2");
		
		System.out.println(document.asXML());
	}

4、代码调用测试方法

读写XML文档主要依赖于org.dom4j.io包,其中提供了DOMReaderSAXReader两类不同方式。因为利用了相同的接口,所以他们的调用方式是相同的。

	public static void main(String[] args) throws Exception {
		ReadXml();
	}
	
	public static void ReadXml() throws Exception{
		   //1.创建SAXReader对象  
        SAXReader reader = new SAXReader();  
        //2.读取文件 
        InputStream ins = Thread.currentThread().getContextClassLoader().getResourceAsStream("students.xml");
        if(ins == null){
        	throw new Exception("获取文件失败或文件不存在!");
        }
        Document document = reader.read(ins);  
        //3.获取根节点元素对象  
        Element root = document.getRootElement();  
        
        //解析 - 遍历 
        readNodes(root);  
        
        //解析 - XPath读取指定标签下的值
        readNodesByXPath(document);
        
        //读取xml文件,添加和更改数值
        addAndUpdateXml(document);
	}

分析:代码片段中为读取项目源文件路径下的students.xml文件;SAXReader的read方法是重载的,可以从InputStream, File, Url等多种不同的源读取,得到的Document对象就代表了整个XML。一切XML解析都是从Root元素开始的,所以首先通过Document获取Root

5、student.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<students>
	<student id='0001'>
		<name>stu01</name>
		<age>20</age>
		<sex>男</sex>
		<param1></param1>
	</student>
	<student id='0002'>
		<name>stu02</name>
		<age>22</age>
		<sex>女</sex>
		<param2></param2>
	</student>
</students>




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章