Java对XML的解析

1、基础认知

解析XML的两种方式:DOM和SAX。DOM,document object model,该种方式采取将XML文档解析成内存中的document对象,从而产生其对应的优缺点,很容易对XML进行CRUD,由于需要将XML全部解析进内存从而不能处理数据量很大的文档,易发生内存崩溃。SAX,Simple API for XML,该方式不将文档全部解析成内存中的document,从而只能进行读取操作,解析速度快,内存占用小。只需要对XML读取数据时,可采用SAX方式,如需进行CRUD,则只能用DOM方式。

两种开发包:JAXP和Dom4j。JAXP是sun公司的官方开发包,Dom4j是开发中实际广泛使用的开发包。JAXP的开发效率不如Dom4j。由于JAXP是sun官方发布,需要了解。而实际开发采用的是Dom4j。

2、Dom4j

2.1 导入开发包:

dom4j.jar、jaxen-beta.jar

2.2 Demo

package com.zpc.xml;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;

public class Dom4jDemo {
	//得到内存中document对象
	public Document getDocument() throws Exception{
		SAXReader reader = new SAXReader();
		Document doc = reader.read(new File("src/grade.xml"));
		return doc;
	}
	
	//将内存中操作后的document写入到XML文件中去
	public void write2Xml(Document doc) throws Exception{
		OutputFormat format = new OutputFormat();
		format.setEncoding("utf-8");
		XMLWriter writer = new XMLWriter(new FileOutputStream(new File("src/grade.xml")),format);
		writer.write(doc);
		writer.close();
	}
	
	//添加节点
	@Test
	public void create() throws Exception{
		Document doc = this.getDocument();
		Element student = DocumentHelper.createElement("student");
		student.addAttribute("name","wmy");
		Element grade = DocumentHelper.createElement("grade");
		grade.setText("100");
		Element age = DocumentHelper.createElement("age");
		age.setText("20");
		student.add(grade);
		student.add(age);
		Element root = doc.getRootElement();
		root.add(student);
		this.write2Xml(doc);
	}
	
	//读取节点数据
	@Test
	public void read() throws Exception{
		Document doc = this.getDocument();
		Element root = doc.getRootElement();
		Node gradeNode = root.selectSingleNode("//student[@name='wmy']/grade");//其中"//student[@name='wmy']/grade"为XPath中的知识点
		String grade = gradeNode.getText();
		System.out.println("the grade is "+grade+" .");
	}
	
	//更新节点数据
	@Test
	public void update() throws Exception{
		Document doc = this.getDocument();
		Node ageNode = doc.selectSingleNode("//student[@name='wmy']/age");
		ageNode.setText("18");
		this.write2Xml(doc);
	}
	
	//删除节点
	@Test
	public void delete() throws Exception{
		Document doc = this.getDocument();
		Node student = doc.selectSingleNode("//student[@name='wmy']");
		student.getParent().remove(student);
		this.write2Xml(doc);
	}
}

3、XPath

XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。

这里给出简易的两个案例:

/*获取所有foo下的bar节点*/

//foo/bar

/*获取foo下id属性为aa的bar节点*/

//foo/bar[@id=’aa‘]

4、总结

通过XPath和Dom4j的结合使用,可以获取XML文档中任意节点元素信息,是处理解析XML数据需求的很好的方式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值