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