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)); } } }
相关文章推荐
- JAXP对XML的DOM解析(增删改查)
- jaxp 解析xml 小demo 对xml文件标签实现增删改查crud操作
- XML解析【介绍、DOM、SAX详细说明、jaxp、dom4j、XPATH】
- xml的dom解析(jaxp实现)
- Java_xml_Dom解析实现增删改查
- web day6 DOM&XML(JAXP的SAX解析XML,schema入门,dom4j&XPath的增删改查)
- java Dom 解析xml文档,实现xml文档结点的增删改查,遍历
- Dom4j解析xml文档实现增删改查
- JAXP下的XML解析用法(包括dom解析和sax解析)
- XML解析【介绍、DOM、SAX详细说明、jaxp、dom4j、XPATH】
- dom4j解析xml文档(增删改查)
- php DOM解析xml文档以及对节点增删改查实现
- JavaWeb系列之四(XML的解析技术(dom,sax)和解析器(jaxp,dom4j))
- Java解析xml文档之DOM解析--CRUD(增删改查)
- XML解析【介绍、DOM、SAX详细说明、jaxp、dom4j、XPATH】
- JAXP对XML文档进行DOM解析实现增删改
- DOM解析XML的增删改查实现
- Dom 解析xml文档,实现xml文档结点的增删改查,遍历
- 利用xml实现增删改查思路介绍
- xml---4种解析方式dom,sax,jdom,dom4j