XML 解析实例

java 解析xml实例

import java.io.*; //Java基础包,包含各种IO操作 
import java.util.*; //Java基础包,包含各种标准数据结构操作 
import javax.xml.parsers.*; //XML解析器接口 

import org.w3c.dom.*; //XML的DOM实现 
import org.apache.crimson.tree.XmlDocument;//写XML文件要用到

public class XMLTest{
	public static Vector<StudentInfo> getAll(String file)
			throws Exception {
		Vector<StudentInfo> students = new Vector<StudentInfo>();
		// 为解析XML作准备,创建DocumentBuilderFactory实例,指定DocumentBuilder
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db = null;
		try {
			db = dbf.newDocumentBuilder();
		} catch (ParserConfigurationException pce) {
			System.err.println(pce); // 出异常时输出异常信息,然后退出,下同
			System.exit(1);
		}

		Document doc = null;
		try {
			doc = db.parse(file);
		} catch (DOMException dom) {
			System.err.println(dom.getMessage());
			System.exit(1);
		} catch (IOException ioe) {
			System.err.println(ioe);
			System.exit(1);
		}
		
		// 先取根元素 students
		Element root = doc.getDocumentElement();
		// 取 student 元素列表
		NodeList nStudents = root.getElementsByTagName("student");
		for (int i = 0; i < nStudents.getLength(); i++) {
			// 依次取每个 user 元素
			Element eStudent = (Element) nStudents.item(i);
			// 创建一个 user 的Bean实例
			StudentInfo sInfo = new StudentInfo();
			// 取user name 属性
			sInfo.name = eStudent.getAttribute("name");

			// 取 sex 元素,下面类同
			NodeList nlSex = eStudent.getElementsByTagName("sex");
			if (nlSex.getLength() == 1) {
				Element e = (Element) nlSex.item(0);
				Text t = (Text) e.getFirstChild();
				sInfo.sex = t.getNodeValue();
			}

			// age
			NodeList nlAge = eStudent.getElementsByTagName("age");
			if (nlAge.getLength() == 1) {
				Element e = (Element) nlAge.item(0);
				Text t = (Text) e.getFirstChild();
				sInfo.age = Integer.parseInt(t.getNodeValue());
			}
			
			students.add(sInfo);
		}
		
		return students;
	}
	public static boolean addNode(String file, StudentInfo student)
		throws Exception{
		//为解析XML作准备,创建DocumentBuilderFactory实例,指定DocumentBuilder
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db = null;
		try {
			db = dbf.newDocumentBuilder();
		} catch (ParserConfigurationException pce) {
			System.err.println(pce);
			System.exit(1);
		}

		Document doc = null;
		try {
			doc = db.parse(file);
		} catch (DOMException dom) {
			System.err.println(dom.getMessage());
			System.exit(1);
		} catch (IOException ioe) {
			System.err.println(ioe);
			System.exit(1);
		}
		//没有此用户名才添加
		if (isNameExists(doc, student.name) == null) {
			// 先取根元素 students
			Element root = doc.getDocumentElement();

			// 下面建立一个student节点,并具有name属性
			Element eStudent = doc.createElement("student");
			eStudent.setAttribute("name", student.name);
			root.appendChild(eStudent);
			
			// 建立 sex 元素,添加到 student 下面,下同
			Element eSex = doc.createElement("sex");
			eStudent.appendChild(eSex);
			Text tSex = doc.createTextNode(student.sex);
			eSex.appendChild(tSex);
			//
			Element eAge = doc.createElement("age");
			eStudent.appendChild(eAge);
			Text tAge = doc.createTextNode("" + student.age);
			eAge.appendChild(tAge);

			// 把XML文档输出到指定的文件
			FileOutputStream outStream = new FileOutputStream(file);
			OutputStreamWriter outWriter = new OutputStreamWriter(outStream);
			((XmlDocument) doc).write(outWriter, "GB2312");
			outWriter.close();
			outStream.close();
			
			return true;
		}
		
		return false;
	}
	
	public static boolean removeByName(String file, String name)
		throws Exception{
		//为解析XML作准备,创建DocumentBuilderFactory实例,指定DocumentBuilder
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db = null;
		try {
			db = dbf.newDocumentBuilder();
		} catch (ParserConfigurationException pce) {
			System.err.println(pce); // 出异常时输出异常信息,然后退出,下同
			System.exit(1);
		}

		Document doc = null;
		try {
			doc = db.parse(file);
		} catch (DOMException dom) {
			System.err.println(dom.getMessage());
			System.exit(1);
		} catch (IOException ioe) {
			System.err.println(ioe);
			System.exit(1);
		}
		
		Element old = isNameExists(doc, name);
		if(old != null){
			Element root = doc.getDocumentElement();
			if(root.removeChild(old) != null){
				// 把XML文档输出到指定的文件
				FileOutputStream outStream = new FileOutputStream(file);
				OutputStreamWriter outWriter = new OutputStreamWriter(outStream);
				((XmlDocument) doc).write(outWriter, "GB2312");
				outWriter.close();
				outStream.close();
				return true;			
			}
		}
		
		return false;
		
	}
	//查找指定用户名是否存在,如果存在返回此节点,否则返回null
	private static Element isNameExists(Document doc, String name)
		throws Exception{
		
		//先取根元素 students
		Element root = doc.getDocumentElement();
		// 取 student 元素列表
		NodeList students = root.getElementsByTagName("student");
		for (int i = 0; i < students.getLength(); i++) {
			// 依次取每个 user 元素
			Element student = (Element) students.item(i);

			//找到了
			if (name.equals(student.getAttribute("name"))) {
				//System.out.println("I'm here");
				//System.out.println(user);
				return student;
			}
		}
		
		return null;
	}
}
class StudentInfo{
	//
	String name;
	String sex;
	int age;
	//
	public StudentInfo(){}
	public StudentInfo(String name, String sex, int age) {
		//super();
		this.name = name;
		this.sex = sex;
		this.age = age;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return name + " is a " + sex + ", and age is " + age;
	}	
}

 附件是相关jar包

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值