dom4j学习总结
来源:互联网 发布:哥伦布 知乎 编辑:程序博客网 时间:2024/05/19 20:42
1.XML解析技术
(1)dom:Document Object Model,文档对象模型,W3C推荐
(2)sax:Simple API for XML,XML社区的实际标准(有点像OSI和TCP/IP的关系)
2.dom4j简介
简单、灵活的开放源代码的库,是一个非常优秀的Java XML API。dom4j使用接口和抽象基类,因此比jdom更灵活。Hibernate中也采用dom4j。
3.下载和配置dom4j
下载地址:http://sourceforge.net/projects/dom4j/
导入dom4j-1.6.1.jar到项目中(build path)
查阅dom4j的相关API文档
4.DEMO
假设有如下的car.xml文件
<?xml version="1.0" encoding="UTF-8"?><carlist> <car> <brand produceTime="2010">Audi</brand> <place>Beijing</place> <price>30</price>> </car> <car> <brand produceTime="2011">toyota</brand> <place>Guangzhou</place>> <price>60</price> </car> </carlist>
现在利用dom4j来解析该xml文档
package web.java.xml.dom4j;import java.io.File;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;/** * 基于dom4j解析XML文件 * @author well * */public class Demo1 {public static void main(String[] args) throws DocumentException {//创建dom4j解析器SAXReader saxReader = new SAXReader();//加载需要解析的XML文件Document doc = saxReader.read(new File("src/web/java/xml/dom4j/car.xml"));//取得根元素Element rootElement = doc.getRootElement();//显示根元素的名称System.out.println(rootElement.getName());//取得根元素下的子元素List<Element> elementList = rootElement.elements();System.out.println("共有"+elementList.size()+"个子元素");for (Element e : elementList) {System.out.println("brand:"+e.elementText("brand")); System.out.println("place:"+e.elementText("place"));System.out.println("==============");}}}
在上面的例子中,首先解析XML文件得到根元素,其次通过根元素得到下面的子元素。
(Doucument是一个接口,具体参见dom4j的api文档)
通常调用Document对象下面的getRootElement()方法得到XML文档的根元素
有三种方式获得Document对象:
(1)读取XML文件,获得document对象(解析)
SAXReader saxReader = new SAXReader();//加载需要解析的XML文件Document doc = saxReader.read(new File("src/web/java/xml/dom4j/car.xml"));
(2)解析XML形式的文本,得到document对象
String text = "<car>Jeep</car>";Document document = DocumentHelper.parseText(text);
(3)主动创建document对象(创建)
Document document = DocumentHandler.createDocument();Element root = document.addElement("car");
5.对XML文件中的指定元素做C.U.D操作
(这里以car.xml为例)
package web.java.xml.dom4j;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.io.UnsupportedEncodingException;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 org.junit.Test;/** * 使用dom4j操作XML文件的C.U.D(Create\Update\Delete) * * @author well * */public class Demo2 {/** * 读取XML文件的公共方法 * * @throws DocumentException */private Document getDocument() throws DocumentException {File file = new File("src/web/java/xml/dom4j/car.xml");SAXReader saxReader = new SAXReader();Document document = saxReader.read(file);return document;}/** * 将文件写入XML文件 * * @param document * @throws FileNotFoundException * @throws UnsupportedEncodingException * @throws IOException */private void write2XML(Document document) throws FileNotFoundException,UnsupportedEncodingException, IOException {// 输出格式良好的OutputFormat oformat = OutputFormat.createPrettyPrint();OutputStream os = new FileOutputStream("src/web/java/xml/dom4j/car.xml");XMLWriter xmlWriter = new XMLWriter(os, oformat);xmlWriter.write(document);xmlWriter.close();}/** * 在XML文件中新建新的元素(根下面的子元素) * * @throws Exception */@Testpublic void create() throws Exception {// 获取Document对象Document document = getDocument();Element rootElement = document.getRootElement();// 获取文件中的第一个元素Element firstCar = (Element) rootElement.elements().get(0);firstCar.addElement("price").setText("40w");write2XML(document);}/** * 更新XML文件中指定元素的值 * * @throws Exception */@Testpublic void update() throws Exception {Document doc = getDocument();Element rootElement = doc.getRootElement();Element firstCar = (Element) rootElement.elements().get(0);firstCar.element("price").setText("50");write2XML(doc);}/** * 删除XML文件中的指定元素 * @throws Exception */@Testpublic void delete() throws Exception {Document doc = getDocument();Element rootElement = doc.getRootElement();Element firstCar = (Element) rootElement.elements().get(0);Element firstCarPrice = (Element) firstCar.element("price");//firstCar.remove(firstCarPrice);firstCarPrice.getParent().remove(firstCarPrice);write2XML(doc);}}
在上面的例子中,将读取创建document对象 和 写入XML文件 的代码抽取出来,因为在每一个方法中这些代码是重复的。
- dom4j学习总结
- dom4j学习总结
- dom4j学习总结 .
- dom4j学习总结
- DOM4J学习总结
- dom4j学习总结(一)
- dom4j学习总结(二)
- dom4j学习总结(一)
- dom4j学习总结(二)
- dom4j学习总结(一)
- dom4j学习总结(二)
- dom4j学习总结(二)
- dom4j学习总结(一)
- dom4j学习总结(2)
- DOM4J 学习总结之 图示
- dom4j学习总结(一)
- dom4j学习总结(一)
- dom4j学习总结(一)[转]
- gcc/g++编译命令编译选项编译参数介绍
- Android 休眠状态对Camera预览的影响
- Android中最重要的采用pull解析xml文件
- 第九堂实验_1
- CSDN博客我来啦~~~
- dom4j学习总结
- 素数最短距离算法
- VC下揭开“特洛伊木马”的隐藏面纱
- Android SurfaceView运行机制详解—剖析Back与Home按键及切入后台等异常处理!
- 历届中国云计算大会PPT集萃(终章):架构到实践的全面解析
- Android开发大牛博客
- 7zip命令行调用
- 在使用ajax时,xheditor编辑器中的文本框无法获取内容的解决方案
- 程序员不爱读书,但这很不明智