dom4j
来源:互联网 发布:临漳干部网络管理系统 编辑:程序博客网 时间:2024/06/05 21:03
两个常见的解析xml的思路:
DOM:将文档中所有内容都封装成对象.读取时,将对象都加载到内存中.在内存中创建一棵dom树(记录对象间的关系).
优点: 方便的进行增删改查.
缺点: 会非常消耗内存.
SAX:事件驱动的.把xml文档的 读取过程,划分出5类事件.我们只要提供遇到每类事件做相应的策略实现.
优点:内存占用小.
缺点: 不能进行增删改的操作.
DOM: 把所有内容封装成了5类对象. document Element Attribute Text Commons 共同的父类 node NOde的属性: 自身属性: nodeType nodeName nodeValue 导航属性 找子节点的:firstChild lastChild childNodes 找父节点的:parentNode 找兄弟节点:nextSibling previousSibling 获得Element的方式 getElementById ==> Document getELementsByTagName ==> Document/Element getELementsByClassName ==> Document/Element getElementsByName ==> Document 对于增删改的操作: 创建一个元素: document.createElement 添加一个元素: element.appendChild ,element.insertBefore 替换一个元素: element.replaceChild 删除一个元素: element.removeChild
dom4j中和了上述两种思想,操作xml简单方便,简单联系,源码中包含了相应的参考文档和需要的jar包,需要的可以在这里下载,
package com.qian.demo;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.Iterator;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;public class Dom4jUtil { //直接将xml文件已string的形式输出 saxReader.read()--document--document.asXML() public static void parseAsXml(String filename) throws DocumentException { InputStream is = Dom4jUtil.class.getClassLoader().getResourceAsStream(filename); SAXReader reader = new SAXReader(); Document document = reader.read(is); String xmlContent = document.asXML(); System.out.println(xmlContent); } //遍历XML文件 public static void iterateXml(String filename) throws DocumentException{ InputStream is = Dom4jUtil.class.getClassLoader().getResourceAsStream(filename); SAXReader reader = new SAXReader(); Document document = reader.read(is); //1.获取根元素 Element root = document.getRootElement(); //2.迭代根元素以下的名字叫student的子元素 for(Iterator<Element> it=root.elementIterator("student");it.hasNext(); ){ Element studentEle = it.next(); //3.获取student元素的number熟悉 String number = studentEle.attributeValue("number"); //4.获取student子元素的内容 String name = studentEle.elementText("name"); String age = studentEle.elementText("age"); String sex = studentEle.elementText("sex"); System.out.println("学号"+number+",姓名:"+name+",年龄:"+age+",性别:"+sex+""); } } //遍历XML文件 public static void listXml(String filename) throws DocumentException{ InputStream is = Dom4jUtil.class.getClassLoader().getResourceAsStream(filename); SAXReader reader = new SAXReader(); Document document = reader.read(is); //1.获取根元素 Element root = document.getRootElement(); //2.迭代根元素以下的名字叫student的子元素 List<Element> studentEleList = root.elements("student"); for(Element studentEle:studentEleList){ //3.获取student元素的number熟悉 String number = studentEle.attributeValue("number"); //4.获取student子元素的内容 String name = studentEle.elementText("name"); String age = studentEle.elementText("age"); String sex = studentEle.elementText("sex"); System.out.println("学号"+number+",姓名:"+name+",年龄:"+age+",性别:"+sex+""); } } //增加元素 public static void addElement(String filename,Student stu ) throws DocumentException, IOException{ InputStream is = Dom4jUtil.class.getClassLoader().getResourceAsStream(filename); SAXReader reader = new SAXReader(); Document document = reader.read(is); //1.获取根节点 Element root = document.getRootElement(); //2.给根节点元素增加元素并且天津属性 Element studentEle = root.addElement("student").addAttribute("number", stu.getNumber()); //3 添加name age sex 子元素并添加子元素中的文本 studentEle.addElement("name").addText(stu.getName()); studentEle.addElement("age").addText(stu.getAge()); studentEle.addElement("sex").addText(stu.getSex()); //4将document对象会写到文件中,因为上面是把file.xml读到内存行程的dom树 //4.1创建一个格式输出器 OutputFormat format = OutputFormat.createPrettyPrint(); //4.2设置格式输出器的编码也就是说依那种方式写数据 format.setEncoding("utf-8"); String realPath = "src/main/resources/"+filename; System.out.println(realPath); XMLWriter writer = new XMLWriter(new FileOutputStream(realPath),format); writer.write(document); writer.flush(); writer.close(); } //删除一个元素,元素的number为0009 public static boolean deleteStudent(String filename,String number) throws Exception{ InputStream is = Dom4jUtil.class.getClassLoader().getResourceAsStream(filename); SAXReader reader = new SAXReader(); Document document = reader.read(is); // 1 获得根元素 Element root = document.getRootElement(); // 使用xpath找到我们需要元素 // 定义xpath String xpath = "//student[@number='"+number+"']"; Element studentEle = (Element) document.selectSingleNode(xpath); // 删除 boolean b = studentEle.getParent().remove(studentEle); // 回写 String realPath = "src/main/resources/"+filename; System.out.println(realPath); XMLWriter writer = new XMLWriter(new FileOutputStream(realPath), OutputFormat.createPrettyPrint()); writer.write(document); writer.close(); return b; } //修改一个元素,元素的number为0009学生的age变为90; public static boolean updateStudent(String filename,Student stu) throws Exception{ InputStream is = Dom4jUtil.class.getClassLoader().getResourceAsStream(filename); SAXReader reader = new SAXReader(); Document document = reader.read(is); // 1 获得根元素 Element root = document.getRootElement(); // 使用xpath找到我们需要元素 // 定义xpath String xpath = "//student[@number='"+stu.getNumber()+"']"; Element studentEle = (Element) document.selectSingleNode(xpath); //修改 studentEle.element("name").setText(stu.getName()); studentEle.element("age").setText(stu.getAge()); studentEle.element("sex").setText(stu.getSex()); // 回写 String realPath = "src/main/resources/"+filename; XMLWriter writer = new XMLWriter(new FileOutputStream(realPath), OutputFormat.createPrettyPrint()); writer.write(document); writer.close(); return true; } /*public static void main(String[] args) { try { parseAsXml("students.xml"); //iterateXml("students.xml"); System.out.println("=========================="); Student stu = new Student(); stu.setNumber("0009"); stu.setName("张三"); stu.setAge("20"); stu.setSex("male"); addElement("students.xml", stu); System.out.println("=========================="); Thread.sleep(100); listXml("students.xml"); //deleteStudent("students.xml", "0009"); Student stu2 = new Student(); stu.setNumber("0009"); stu.setName("李四"); stu.setAge("20"); stu.setSex("female"); updateStudent("students.xml", stu2); } catch (Exception e) { e.printStackTrace(); } }*/}
阅读全文
0 0
- Dom4j
- dom4j
- DOM4J
- DOM4j
- Dom4j
- Dom4j
- dom4j
- dom4j
- dom4j
- dom4j
- dom4j
- dom4j
- dom4j
- dom4j
- DOM4J
- dom4j
- dom4j
- Dom4j
- hdu 4352 hdu_4352_XHXJ's LIS (数位DP+最长上升子序列+未压缩)
- 模板的分离编译
- vue input["number"],禁止显示上下箭头,禁止鼠标滚轮事件
- opengl之glscalse
- Spring读书学习笔记(四)——装配Spring Bean
- dom4j
- mybatis实现DAO,MapperXML语法
- 机房收费系统之Environ函数
- Centos7 下Nginx安装图文详解
- Java并发编程:深入剖析ThreadLocal
- python 函数装饰器的典型示例
- 创建一个窗口程序(JFrame),标题栏起名为“浏览器”,有一个菜单条,有“文件”、“编辑”、“查看”3个菜单。“文件”菜单有两个菜单项,一项是“打开”,一项是“保存”,“打开”项做成子菜单,有两个菜
- OpenJ_Bailian
- Java 启动参数