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包