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

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("\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));
		}
	
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麦客子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值