909422229__XML解析之dom4j
这几天一直在学XML的解析方式,下面记录一下一种XML的dom4j,这种方式效率很高,速度很快,话不多说,下面附上源码跟注释,希望给大家带来帮助,也为自己的学习留下一点轨迹,爱生活,爱Java。 还是那句话,多看源码,多打代码就明白了,有的知识不需要理解,用的多了自然就懂了,例如最开始学习的public static void main(String args){} 我相信当初学习java的都不懂,但是只要记住就可以了,我相信现在大家都懂了,哈哈。 有错误的大家踊跃指出,知错能改,善莫大焉。 JAVA文件源码: import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.util.Iterator; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.xml.sax.DocumentHandler; public class test_02 { public static void main(String[] args) throws Exception { // 得到第一个本书的名字 // text1(); // 得到第二本书的书名 // text2(); // 读取属性节点 // text3(); // 修改 // text4(); // 添加新的元素 // text5(); // 第二种添加元素 // text6(); // 删除元素 text7(); } private static void text7() throws Exception{ // 找到第一本图书的书名 // 读取磁盘文件的作用 SAXReader reader = new SAXReader(); Document doc = reader.read(new File("src/NewFile1.xml")); Element root = doc.getRootElement(); Element price = root.element("书").element("售价"); price.getParent().remove(price); /** * 写入之后使元素有秩序的排列 createPrettyPrint 良好的格式 OutputFormat 格式化的输出器 */ OutputFormat format = OutputFormat.createPrettyPrint(); // 第一种将文档格式设置成需要的编码,设置的文档 format.setEncoding("UTF8"); // 将内存中的数据写入XML文档中 // FileWriter fileWroter = new FileWriter("src/users.xml"); // 防止乱码。指定编码类型 // 利用XMLWriter对象使文件成功写入XML文件,调用方法 // 参数:关联文件,写入的目标文件 第二个参数:指明输出格式 // 第二种将代码设置成需要的编码方式,设置自身。利用FileOutputStream指定了文档的编码类型 XMLWriter writer = new XMLWriter(new OutputStreamWriter( new FileOutputStream("src/NewFile1.xml"),"UTF8"),format); writer.write(doc); writer.close(); } private static void text6() throws Exception { // 找到第一本图书的书名 // 读取磁盘文件的作用 SAXReader reader = new SAXReader(); Document doc = reader.read(new File("src/NewFile1.xml")); Element root = doc.getRootElement(); List<Element> lists = root.elements(); Element bookname = DocumentHelper.createElement("bookname"); // 对指定位置添加元素 lists.add(1,bookname); // 添加属性 // price.addAttribute("price","40.0"); /** * 写入之后使元素有秩序的排列 createPrettyPrint 良好的格式 OutputFormat 格式化的输出器 */ OutputFormat format = OutputFormat.createPrettyPrint(); // 第一种将文档格式设置成需要的编码,设置的文档 format.setEncoding("UTF8"); // 将内存中的数据写入XML文档中 // FileWriter fileWroter = new FileWriter("src/users.xml"); // 防止乱码。指定编码类型 // 利用XMLWriter对象使文件成功写入XML文件,调用方法 // 参数:关联文件,写入的目标文件 第二个参数:指明输出格式 // 第二种将代码设置成需要的编码方式,设置自身。利用FileOutputStream指定了文档的编码类型 XMLWriter writer = new XMLWriter(new OutputStreamWriter( new FileOutputStream("src/NewFile1.xml"),format); writer.write(doc); writer.close(); } // 添加新的元素 private static void text5() throws Exception { // 找到第一本图书的书名 // 读取磁盘文件的作用 SAXReader reader = new SAXReader(); Document doc = reader.read(new File("src/NewFile1.xml")); Element root = doc.getRootElement(); List<Element> lists = root.elements(); Element book = lists.get(1); // 创建属性,创建元素体,创建元素,返回的都是元素对象,直接在下面添加对象即可添加到XML中 Element name = DocumentHelper.createElement("书名").addAttribute("name", "20"); name.setText("CSS详解"); book.add(name); // 添加属性 // price.addAttribute("price","40.0"); // 第二种添加属性 /** * 写入之后使元素有秩序的排列 createPrettyPrint 良好的格式 OutputFormat 格式化的输出器 */ OutputFormat format = OutputFormat.createPrettyPrint(); // 第一种将文档格式设置成需要的编码,设置的文档 format.setEncoding("UTF8"); // 将内存中的数据写入XML文档中 // FileWriter fileWroter = new FileWriter("src/users.xml"); // 防止乱码。指定编码类型 // 利用XMLWriter对象使文件成功写入XML文件,调用方法 // 参数:关联文件,写入的目标文件 第二个参数:指明输出格式 // 第二种将代码设置成需要的编码方式,设置自身。利用FileOutputStream指定了文档的编码类型 XMLWriter writer = new XMLWriter(new OutputStreamWriter( new FileOutputStream("src/NewFile1.xml"),format); writer.write(doc); writer.close(); } // 修改第一本书的售价,改成50元 private static void text4() throws Exception { // 找到第一本图书的书名 // 读取磁盘文件的作用 SAXReader reader = new SAXReader(); Document doc = reader.read(new File("src/NewFile1.xml")); Element root = doc.getRootElement(); Element price = root.element("书").element("售价"); price.setText("50.0"); // 添加属性 // price.addAttribute("price",format); writer.write(doc); writer.close(); } private static void text3() throws DocumentException { // 找到第一本图书的书名 // 读取磁盘文件的作用 SAXReader reader = new SAXReader(); Document doc = reader.read(new File("src/NewFile1.xml")); Element root = doc.getRootElement(); Element bookname = root.element("书").element("书名"); // 第一种:得到元素属性 System.out.println(bookname.attributeValue("isbn")); // 第二种返回的是属性对象,根据属性对象得到属性的值 Attribute attr = bookname.attribute("price"); System.out.println(attr.getValue()); } private static void text2() throws Exception { // 找到第一本图书的书名 // 读取磁盘文件的作用 SAXReader reader = new SAXReader(); Document doc = reader.read(new File("src/NewFile1.xml")); // 得到根节点 Element root = doc.getRootElement(); // 将所有元素取出来放到迭代器中 // Iterator<Element> iterator = root.elementIterator(); // //遍历迭代器找到 // while(iterator.hasNext()){ // Element element = iterator.next(); // System.out.println(element.element("书名").getText()); // } // 利用List直接使用元素名称找到节点与元素体 List<Element> lists = root.elements(); System.out.println(lists.get(1).element("书名").getText()); } private static void text1() throws Exception { // 找到第一本图书的书名 // 读取磁盘文件的作用 SAXReader reader = new SAXReader(); Document doc = reader.read(new File("src/NewFile1.xml")); // 先找根节点---》子节点---》子节点 // 找到根节点 Element root = doc.getRootElement(); // System.out.println(root.getNodeType()); // 找子节点 Element book = root.element("书"); // 找到孙子节点,获取孙子节点的元素体 System.out.println(book.element("书名").getText()); } } XML文件源码: <?xml version="1.0" encoding="UTF-8"?> <书架> <书> <书名 isbn="234-345-1234" price="35">JavaEE</书名> <作者>dhw</作者> </书> <书> <书名 isbn="234-345-1234">Java</书名> <作者>dhw</作者> <售价>39.0</售价> <书名 name="20">CSS详解</书名> </书> </书架> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |