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

来源:互联网 发布:杨辉三角形的规律c语言 编辑:程序博客网 时间:2024/05/16 18:22
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{//1DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();//2DocumentBuilder builder = builderFactory.newDocumentBuilder();//3Document document = builder.parse("scores.xml");//4Element root = document.getDocumentElement();//5Element nameElement = (Element) root.getElementsByTagName("name").item(0);nameElement.setTextContent("王彤彤");Element subjectElement = (Element) root.getElementsByTagName("subject").item(0);subjectElement.setTextContent("js");//6TransformerFactory 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);//5lastStudent.getParentNode().removeChild(lastStudent);//6TransformerFactory 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{//1SAXReader reader = new SAXReader();//2Document document = reader.read("1.xml");//3Element rootElement = document.getRootElement();//4List<Element> studentElements = rootElement.elements("student");Element firstElement = studentElements.get(0);firstElement.element("name").setText("keke");firstElement.element("subject").setText("js");//5OutputFormat 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;}@Overridepublic 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;}@Overridepublic void startDocument() throws SAXException {list = new ArrayList<>();}@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {if (qName.equals("Book")) {book = new Book();}nowTag = qName;}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {if (qName.equals("Book")) {list.add(book);}nowTag = "";}@Overridepublic 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));}}}

阅读全文
0 0
原创粉丝点击