dom4j解析XML文件
一.简介
dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的软件。如今可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这已经是必须使用的jar包, Hibernate也用它来读写配置文件。
二.使用方法
1.导入必要jar包
我这里导入的是dom4j-1.6.1.jar(可以百度搜索下载)
2.使用dom4j写xml文件
1 package Dom4j; 2 3 import java.io.FileOutputStream; 4 import java.io.FileWriter; 5 6 import org.dom4j.Document; 7 import org.dom4j.DocumentHelper; 8 import org.dom4j.Element; 9 import org.dom4j.io.OutputFormat; 10 import org.dom4j.io.XMLWriter; 11 12 13 public class dom4jTest1 { 14 public static void main(String args[]) throws Exception 15 { 16 //使用helper,创建文档 17 Document document = DocumentHelper.createDocument(); 18 //创建节点book,并设置为根节点 19 Element element = DocumentHelper.createElement("book"); 20 document.setRootElement(element); 21 /***********另外一种创建方式********/ 22 //Element element2 = DocumentHelper.createElement("book"); 23 //Document document2 = DocumentHelper.createDocument(element2); 24 /****************************/ 25 //添加属性 26 element.addAttribute("name", "Journey to the West"); 27 //添加子节点,注意观察和属性的区别。 28 Element Author = element.addElement("Author"); 29 Author.setText("WuChenEn"); 30 Element Dynasty = element.addElement("dynasty"); 31 Dynasty.setText("Ming"); 32 33 //输出到控制台 34 XMLWriter xmlWriter = new XMLWriter(); 35 xmlWriter.write(document); 36 37 //输出到文件 38 OutputFormat format = new OutputFormat(" ",true); //设置缩进为2个空格,并且另起一行为true 39 XMLWriter xmlWriter2 = new XMLWriter(new FileOutputStream("books.xml"),format); 40 xmlWriter2.write(document); 41 42 //另一种输出方式 43 XMLWriter xmlWriter3 = new XMLWriter(new FileWriter("books2.xml"),format); 44 xmlWriter3.write(document); 45 xmlWriter3.flush(); //或者close方法。如不添加则文件为空白 46 } 47 }
在运行之后,可以看到项目根目录生成了如下books.xml文件和books2.xml。
books.xml文件结构如下:
<?xml version="1.0" encoding="UTF-8"?> <book name="Journey to the West"> <Author>WuChenEn</Author> <dynasty>Ming</dynasty> </book>
3.使用dom4j解析xml文件
XML文件格式如下:
<?xml version="1.0" encoding="UTF-8"?> <books> <book id="001"> <title>Harry Potter</title> <author>J K. Rowling</author> </book> <book id="002"> <title>Learning XML</title> <author>LearnAndGet</author> </book> </books>
解析过程:
1 package Dom4j; 2 3 import java.io.File; 4 import java.util.List; 5 6 import org.dom4j.Attribute; 7 import org.dom4j.Document; 8 import org.dom4j.DocumentException; 9 import org.dom4j.Element; 10 import org.dom4j.io.SAXReader; 11 12 public class dom4jTest2 { 13 public static void main(String args[]) throws Exception 14 { 15 SAXReader reader = new SAXReader(); // 16 File file = new File("books2.xml"); 17 Document document = reader.read(file); 18 Element root = document.getRootElement(); 19 20 List<Element> childElements = root.elements(); 21 for(Element child : childElements) 22 { 23 //在未知属性名的情况下: 24 List<Attribute> attributeList = child.attributes(); 25 for(Attribute attr : attributeList) 26 { 27 System.out.println(attr.getName()+" : "+attr.getValue()); 28 } 29 30 /*若已知属性名,可使用以下方法 31 * system.out.println("id"+" : "+child.attributeValue("id")); 32 */ 33 34 //在未知子节点名的情况下: 35 List<Element> elementList = child.elements(); 36 for(Element element : elementList) 37 { 38 System.out.println(element.getName()+" : "+element.getText()); 39 } 40 /*若已知子节点属性名,可使用以下方法 41 * System.out.println("title"+" : "+child.elementText("title")); 42 * System.out.println("author"+" : "+child.elementText("author")); 43 */ 44 } 45 } 46 }
可以看到控制台输出结果如下:
id : 001 title : Harry Potter author : J K. Rowling id : 002 title : Learning XML author : LearnAndGet
使用Iterator迭代器的方式来解析xml:
import java.io.File; import java.util.Iterator; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class Dom4jTest { public static void main(String[] args) throws Exception { SAXReader reader = new SAXReader(); Document document = reader.read(new File("books.xml")); Element root = document.getRootElement(); Iterator it = root.elementIterator(); while (it.hasNext()) { Element element = (Element) it.next(); //未知属性名称情况下 /*Iterator attrIt = element.attributeIterator(); while (attrIt.hasNext()) { Attribute a = (Attribute) attrIt.next(); System.out.println(a.getValue()); }*/ //已知属性名称情况下 System.out.println("id: " + element.attributeValue("id")); //未知元素名情况下 /*Iterator eleIt = element.elementIterator(); while (eleIt.hasNext()) { Element e = (Element) eleIt.next(); System.out.println(e.getName() + ": " + e.getText()); } System.out.println();*/ //已知元素名情况下 System.out.println("title: " + element.elementText("title")); System.out.println("author: " + element.elementText("author")); System.out.println(); } } }
作者:LearnAndGet
如果觉得阅读本文没有浪费您的时间,请点击推荐支持~
本文部分内容参考自互联网,如有侵权,请及时联系本人删除
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.