Java使用Dom解析xml学习记录

本文介绍使用Dom解析xml文件。
1、若提示某些类不存在,则检查项目执行环境JRE System Library是否为JavaSE-1.7。
2、注意某些类引入包的选择,有些类需要引入org.w3c.dom下的包,详见下面代码。

3、新建students.xml文件内容如下

<?xml version="1.0" encoding="UTF-8"?>
<学生列表>
	<学生 学号="20131231002">
		<姓名>张琴</姓名>
		<性别>女</性别>
		<专业>英语</专业>
		<班级>201303</班级>
		<学分>700</学分>
	</学生>
	<学生 学号="20131232006">
		<姓名>王海</姓名>
		<性别>男</性别>
		<专业>计算机</专业>
		<班级>201302</班级>
		<学分>800</学分>
	</学生>
	<学生 学号="20131239006">
		<姓名>李飞</姓名>
		<性别>男</性别>
		<专业>金融</专业>
		<班级>201303</班级>
		<学分>750</学分>
	</学生>
</学生列表>
4、读取xml文件代码如下

package com.example;

import java.io.File;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class DomReadXml {
	public static void main(String[] args) {
		try {

			//获取DocumentBuilderFactory实例
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			//获取DocumentBuilder对象
			DocumentBuilder builder = factory.newDocumentBuilder();
			//获取Document对象
			Document document= builder.parse(new File("students.xml"));
			//获取Document的根元素,即学生列表元素
			Element root= document.getDocumentElement();
			//获取学生元素组
			NodeList stutentList= root.getElementsByTagName("学生");
			
			//遍历学生元素组
			for(int i=0;i<stutentList.getLength();i++)
			{
				//获取学生元素
				Element student = (Element) stutentList.item(i);
				//输出学生学号
				System.out.println("学号:"+student.getAttribute("学号"));
				//获取学生元素的子节点组
				NodeList studentChildList = student.getChildNodes();
				
				//遍历节点组
				for(int j=0;j<studentChildList.getLength();j++)
				{
					//获取学生子节点
					Node studentChildNode = studentChildList.item(j);
					//过滤掉空白节点即#text节点
					if(studentChildNode instanceof Element)
					{
						//输出节点信息
						System.out.println(studentChildNode.getNodeName()+": "+studentChildNode.getTextContent());
					}
				}
				System.out.println("-----------------");
			}
			
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

输出结果:



4、写入xml文件代码如下

package com.example;

import java.io.File;
import java.io.StringWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class DomWriteXml {

	public static void main(String[] args) {
		try {
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			//创建document
			Document document = builder.newDocument();
			//创建学生列表元素
			Element studentList = document.createElement("学生列表");
			//创建学生元素
			Element student1 = document.createElement("学生");
			//为学生元素设置学号属性
			student1.setAttribute("学号", "20131231002");
			//创建姓名元素
			Element name1 = document.createElement("姓名");
			//设置元素内容
			name1.setTextContent("张琴");
			
			//依次创建性别、专业、班级、学分元素
			Element sex1 = document.createElement("性别");
			sex1.setTextContent("女");
			Element pro1 = document.createElement("专业");
			pro1.setTextContent("英语");
			Element class1 = document.createElement("班级");
			class1.setTextContent("201303");
			Element grade1 = document.createElement("学分");
			grade1.setTextContent("700");
			
			//依次添加元素
			student1.appendChild(name1);
			student1.appendChild(sex1);
			student1.appendChild(pro1);
			student1.appendChild(class1);
			student1.appendChild(grade1);
			
			studentList.appendChild(student1);
			document.appendChild(studentList);
			//添加另外两个学生元素也是如此,介于代码的篇幅,就不演示了
			
			TransformerFactory transformerFactory = TransformerFactory.newInstance();
			Transformer transformer = transformerFactory.newTransformer();
			//新建StringWriter对象,用于输入字符串
			StringWriter writer = new StringWriter();
			//调用transform方法将document转换为StringWriter对象
			transformer.transform(new DOMSource(document),new StreamResult(writer));
			//输出document转换后的字符串
			System.out.println(writer.toString());
			//调用transform方法将document保存为xml文件
			transformer.transform(new DOMSource(document),new StreamResult(new File("example.xml")));
			//输出提示信息
			System.out.println("保存文件成功");
			
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (TransformerConfigurationException e) {
			e.printStackTrace();
		} catch (TransformerException e) {
			e.printStackTrace();
		}
	}
}
5、相信通过对xml文件的读取与写入操作的学习,再进行xml文件的修改或删除操作已经没问题了,只需获得节点或元素调用一系列的remove方法即可。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值