您的位置:首页 > 其它

XML解析(增删改查)-DOM解析(Jaxp、DOM4J实现DOM解析)、SAX解析(Jaxp实现SAX解析)

2017-08-24 16:07 489 查看
package com.shuhuadream.test;

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
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;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Test01 {

public static void main(String[] args) {
try {
//readXML();
//writeXML();
//updateXML();
deleteXML();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 读取XML文件的方法
* @throws Exception
* */
public static void readXML() throws Exception{
//		1.创建工厂类对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//		2.创建解析器对象
DocumentBuilder builder = factory.newDocumentBuilder();
//		3.开始解析XML文档,内存当中形成DOM树
Document document = builder.parse("scores.xml");
//		4.获取文档当中的根元素
Element root = document.getDocumentElement();
//		5.获取跟标签当中的子节点的集合
NodeList nodeList = root.getElementsByTagName("student");
List<Student>list = new ArrayList<>();

//		6.遍历节点集合
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
//			把student节点转换成元素
Element studentElement = (Element) node;
Element idElement = (Element) studentElement.getElementsByTagName("id").item(0);
int id = Integer.parseInt(idElement.getTextContent());
Element nameElement = (Element) studentElement.getElementsByTagName("name").item(0);
String name = nameElement.getTextContent();
Element subjectElement = (Element) studentElement.getElementsByTagName("subject").item(0);
String subject = subjectElement.getTextContent();

Element scoreElement = (Element) studentElement.getElementsByTagName("score").item(0);
int score = Integer.parseInt(scoreElement.getTextContent());

Student s1 = new Student(id, name, subject, score);

list.add(s1);
}
//		遍历集合当中的内容
for (Student stu : list) {
System.out.println(stu);
}
}

/**
* 向xml文件当中写入内容的方法
* @throws Exception
* */
@SuppressWarnings("resource")
public static void writeXML() throws Exception{
//		1.创建工厂类对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//		2.创建解析类对象
DocumentBuilder builder = factory.newDocumentBuilder();
//		3.开始解析
Document document = builder.parse("scores.xml");
//		4.获取根标签
Element root = document.getDocumentElement();
//		5.创建Student元素
Element studentElement = document.createElement("student");
//		创建student标签当中的子节点元素
Element idElement = document.createElement("id");
idElement.setTextContent("3");

Element nameElement = document.createElement("name");
nameElement.setTextContent("张丽");

Element subjectElement = document.createElement("subject");
subjectElement.setTextContent("C++");

Element scoreElement = document.createElement("score");
scoreElement.setTextContent("98");

//		将student子节点的元素追加到book元素当中
studentElement.appendChild(idElement);
studentElement.appendChild(nameElement);
studentElement.appendChild(subjectElement);
studentElement.appendChild(scoreElement);

//		将student标签添加到根标签当中
root.appendChild(document.createTextNode("\n"));
root.appendChild(studentElement);
root.appendChild(document.createTextNode("\
4000
n"));

//		把内存的改变放入到硬盘当中
//		1.获取转换器工厂对象
TransformerFactory formerFactory = TransformerFactory.newInstance();
Transformer transformer = formerFactory.newTransformer();
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("scores.xml"), "GBK");
transformer.transform(new DOMSource(document), new StreamResult(osw));
System.out.println("添加成功");
}

public static void updateXML() throws Exception{
//		1
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//		2
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//		3
Document document = builder.parse("scores.xml");
//		4
Element root = document.getDocumentElement();
//		5
Element nameElement = (Element) root.getElementsByTagName("name").item(0);
nameElement.setTextContent("王彤彤");

Element subjectElement = (Element) root.getElementsByTagName("subject").item(0);
subjectElement.setTextContent("js");
//		6
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("scores.xml"), "GBK");

transformer.transform(new DOMSource(document), new StreamResult(osw));
}

/**
* 删除XML文件的方法
* @throws Exception
**/
@SuppressWarnings("resource")
public static void deleteXML() throws Exception{
//		1.创建工厂类对象
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//		2.创建解析类对象
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//		3.开始解析
Document document = builder.parse("scores.xml");
//		4.
NodeList nodeList = document.getElementsByTagName("student");
Node lastStudent = nodeList.item(2);
//		5
lastStudent.getParentNode().removeChild(lastStudent);
//		6
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("scores.xml"), "GBK");
transformer.transform(new DOMSource(document), new StreamResult(writer));

}
}
package com.shuhuadream.dom4jtest;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import com.shuhuadream.test.Student;

public class Test01 {

public static void main(String[] args) {
try {
//readXML();
//writeXML();
//updateXML();
deleteXML();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 读取xml文件当中的内容。
* @throws Exception
* @throws FileNotFoundException
*
* */
public static void readXML() throws FileNotFoundException, Exception{
//		1.获得读取器对象
SAXReader reader = new SAXReader();
//		2.读取文件,存放到文档当中
Document document = reader.read(new InputStreamReader(new FileInputStream("1.xml")));
//		3.获取根元素标签
Element root = document.getRootElement();
//		4.获取根元素当中的book标签元素
List<Element> studentElements = root.elements("student");

List<Student>studentList = new ArrayList<>();
//		5.遍历book标签集合信息
for (int i = 0; i < studentElements.size(); i++) {
Element studentEle = studentElements.get(i);
int id = Integer.parseInt(studentEle.elementText("id"));
String name = studentEle.elementText("name");
String subject = studentEle.elementText("subject");
int score = Integer.parseInt(studentEle.elementText("score"));

Student student =new Student(id, name, subject, score);
studentList.add(student);
}

for (Student student : studentList) {
System.out.println(student);
}
}

/**
* 写入XML文件的方法
* @throws Exception
* @throws FileNotFoundException
*
**/
public static void writeXML() throws DocumentException, IOException{
//创建读取器对象
SAXReader reader = new SAXReader();
//开始读取,生成文档对象
Document document = reader.read(new InputStreamReader(new FileInputStream("1.xml")));
//		3.得到根元素
Element rootElement = document.getRootElement();

//		4.添加元素
Element studentElement = rootElement.addElement("student");
studentElement.addElement("id").addText("3");
studentElement.addElement("name").addText("Alice");
studentElement.addElement("subject").addText("C++");
studentElement.addElement("score").addText("88");

//		5.把内存的改变写入到硬盘当中

//		输出格式对象
OutputFormat format = OutputFormat.createCompactFormat();
format.setEncoding("UTF-8");

XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream("1.xml"),"UTF-8"),format);
writer.write(document);
writer.close();
System.out.println("写入成功");
}

/**
* 更新XML文件的实例
* @throws DocumentException
* @throws IOException
* @des
*
**/
public static void updateXML() throws DocumentException, IOException{
//		1
SAXReader reader = new SAXReader();
//		2
Document document = reader.read("1.xml");
//		3
Element rootElement = document.getRootElement();
//		4
List<Element> studentElements = rootElement.elements("student");
Element firstElement = studentElements.get(0);
firstElement.element("name").setText("keke");
firstElement.element("subject").setText("js");

//		5
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("1.xml"), format);
xmlWriter.write(document);
xmlWriter.close();
System.out.println("更新成功");
}

/**
*删除XML文件的实例
* @throws Exception
**/
public static void deleteXML() throws Exception{
SAXReader reader = new SAXReader();

Document document = reader.read(new File("1.xml"));

Element rootElement = document.getRootElement();

List<Element> elements = rootElement.elements("student");

Element lastStudent = elements.get(2);
rootElement.remove(lastStudent);

OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("1.xml"), format);
xmlWriter.write(document);
xmlWriter.close();
System.out.println("移除成功!!");
}
}
package com.shuhuadream.test;

public class Student {
private int id;
private String name;
private String subject;
private int score;
public Student(int id, String name, String subject, int score) {
super();
this.id = id;
this.name = name;
this.subject = subject;
this.score = score;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", subject=" + subject + ", score=" + score + "]";
}

}
package com.qianfeng.demo03;

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;

import com.qianfeng.demo01.Book;

public class SAXDemo01 {

public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
//		1.获取到解析器工厂类对象
SAXParserFactory factory = SAXParserFactory.newInstance();
//		2.获取解析类对象
SAXParser parser = factory.newSAXParser();
BookHandler bh = new BookHandler();
//		3.开始解析
parser.parse(new File("book.xml"), bh);

List<Book> list = bh.getList();
for (Book book : list) {
System.out.println(book);
}
}
}
package com.qianfeng.demo03;

import java.util.ArrayList;
import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import com.qianfeng.demo01.Book;

public class BookHandler extends DefaultHandler{
private List<Book>list;
private Book book;
private String nowTag;

public List<Book> getList() {
return list;
}
@Override
public void startDocument() throws SAXException {
list = new ArrayList<>();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (qName.equals("Book")) {
book = new Book();
}
nowTag = qName;
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if (qName.equals("Book")) {
list.add(book);
}
nowTag = "";
}

@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String text = new String(ch, start, length);
if (nowTag.equals("Id")) {
book.setId(Integer.parseInt(text));
}else if (nowTag.equals("Name")) {
book.setName(text);
}else if (nowTag.equals("Price")) {
book.setPrice(Double.parseDouble(text));
}

}
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: