我所理解的dom4j就是用来解析XML文档的,XML文档的重要性不言而喻,用过框架的人谁不知道呢,是不是。但是实际上需要我们自己来解析XML文档的应用场景感觉不是很多,毕竟该解析的XML都已经被框架很好的解析了,你在自己搞一遍不是吃饱了撑的么?但是,有时候还真是需要撑一下,如果你想自己来写框架的话,XML的解析就十分重要了。另外一点是,掌握XML解析对后面框架的学习也有一定的好处,不是么?

废话不多说,直接上代码。

解析XML

 // 解析XML
public Document parse(String path) throws DocumentException { SAXReader reader = new SAXReader(); // 新建一个SAXReader对象
Document document = reader.read(path); // read()方法有有很多重载的方法,为的是读取不同来源的XML
return document; // 返回解析的XML对象,以DOM树的形式
}

使用迭代器

 // 使用迭代器
public void bar(Document document) { Element root = document.getRootElement(); // 由DOM树的对象document获得根元素 // 迭代遍历根节点root的子元素
for (Iterator<Element> i = root.elementIterator(); i.hasNext();) {
Element element = i.next();
} // 迭代遍历根节点root名字为"foo"的子元素
// 根据名字获得迭代器
for(Iterator<Element> i = root.elementIterator("foo"); i.hasNext();) {
Element foo = i.next();
// do something
}
}

使用XPath进行导航

 // 使用XPath进行导航
public void bar1(Document document) {
List list = document.selectNodes("//foo/bar"); // selectNodes获得结点都保存在List当中 Node node = document.selectSingleNode("//foo/bar/author"); // 获取单个结点
String name = node.valueOf("@name"); // 获得结点name的属性值 List list2 = document.selectNodes("//a/@href"); // 选取所有超链接的href属性值 // 遍历这个属性
for (Iterator iter = list.iterator(); iter.hasNext();) { Attribute attribute = (Attribute) iter.next();
String url = attribute.getValue();
}
}

快速地遍历

如果想要快速地遍历一个比较大的XML文档树,用下面的方法可以减少迭代器的创建。

 // 下面的这个递归还挺别致的
public void treeWalk(Document document) { treeWalk(document.getRootElement()); // 这个尼玛看起来像递归,其实根本不是
} public void treeWalk(Element element) { for(int i=0, size=element.nodeCount(); i<size; i++) { Node node = element.node(i);
if(node instanceof Element) {
treeWalk((Element) node); // 这里才是递归
}
else {
// do something......
}
}
}

创建一个新的XML文档

 public Document createDocument() {
Document document = DocumentHelper.createDocument(); // 先返回一个document对象再说
Element root = document.addElement("root"); // 添加根元素 Element author1 = root.addElement("author")
.addAttribute("name", "James") // 添加属性name
.addAttribute("location", "UK") // 添加属性location
.addText("James Strachan"); // 添加标签里面的文本
return document;
}

将XML文档写入到文件中

一个快速和简单的方法将一个Doument对象或者Node对象写入到文件中是通过write()方法

 FileWriter out = new FileWriter("foo.xml");
Document.write(out);

字符串和XML的相互转化

 // XML转为字符串
Document document = new SAXReader().read("foo.xml");
String text = document.asXML(); // 字符串转为XML
String text2 = "<person><name>James</name></person>";
Document document2 = DocumentHelper.parseText(text2);

dom4j的quickstart的更多相关文章

  1. java学习笔记DOM4J解析(7)

    DOM4J即Document Object Model for Java使用java技术以文档方式解析XML数据的模型. DOM4J是开源组织提供的一个免费的.强大的XML解析工具,如果开发者需要在项 ...

  2. XML技术之DOM4J解析器

    由于DOM技术的解析,存在很多缺陷,比如内存溢出,解析速度慢等问题,所以就出现了DOM4J解析技术,DOM4J技术的出现大大改进了DOM解析技术的缺陷. 使用DOM4J技术解析XML文件的步骤? pu ...

  3. 四种解析和创建方式(DOM,SAX,DOM4J,JDOM)

    一.先导入jar包 DOM基于树形,SAX基于事件,DOM4J和JDOM基于底层API 二.代码如下 1 package com.sxt.test; import java.io.File; impo ...

  4. dom4j的小例子

    1.要解析的xml文件book.xml <?xml version="1.0" encoding="UTF-8"?> <books> & ...

  5. Dom4J解析技术

    前面的话  本文主要讲解有关Dom4j技术和xpath配合下的优化!   目录:    为什么需要Dom4J    DOM4J怎么用    xpath怎么配合DOM4J 一  为什么需要Dom4J 一 ...

  6. Dom4j解析xml文件

    dom4j是一个Java的XML API,类似于jdom,用来读取的XML文件,由于它是将文件解析完存放在内存当中的,所以不适合解析大的XML文件,但就方便性和性能方面,一定程度要优于JDK中Domc ...

  7. java dom4j封装和解析XML

    package org.scbit.lsbi.scp.utils; import java.util.ArrayList; import java.util.List; import org.dom4 ...

  8. xml之dom4j解析

    * 使用dom4j解析xml 实例在java520里面 TextDom4j * dom4j,是一个组织,针对xml解析,提供解析器dom4j * dom4j不是javase的一部分,想要使用第一步需要 ...

  9. 使用dom4j读取xml连接数据库与之单例模式

    使用dom4j读取xml ,加入jar包 dom4j-1.6.1.jar jaxen-1.1-beta-6.jar public class XmlConfigReader { //懒汉式,延迟加载 ...

随机推荐

  1. spark读取hdfs上的文件和写入数据到hdfs上面

    def main(args: Array[String]): Unit = { val conf = new SparkConf() conf.set("spark.master" ...

  2. Windows7+VirtualBox+Ubuntu本地开发环境搭建

    首先下载相应的VirtualBox和Ubuntu镜像文件 安装Ubuntu操作系统 一 网络设置 将虚拟机的network连接模式设置为Bridge模式,注意无线网卡要与本机的无线网卡名称一致 在wi ...

  3. css3水波纹效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 手机端页面自适应解决方案—rem布局

    只需在页面引入这段原生js代码就可以了 (function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientation ...

  5. PHP使用OPENSSL RSA加密解密数据

    加密数据有很多种方法,今天我们来看一下OPENSSL RSA的加密办法. 1.首先得安装php的openssl扩展 php -m | grep openssl 执行以上命令,确保已经安装了openss ...

  6. 通过Chrome浏览器检测和优化页面

    1.访问(http://www.cnblogs.com/viaiu/) 2.点击F12 前两步就在扯淡 3.点击Audits标签,进入测试界面 4.点击按钮开始检测 5.如下图可以进行页面加载资源的详 ...

  7. 002-添加网站ico图标

    <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" me ...

  8. 使用AutoIT对增加和删除文件属性的实现

    编写历程: 前段日子,晚上下班回家,一个舍友问我可不可以将一个目录下的隐藏文件全部显示出来(变成非隐藏文件),我说可以. 之后就开始大刀阔斧的寻找方法来做这件事,上网找,说需要一个Windows下的小 ...

  9. Android -- 常见控件的小效果

    1,EditText控件 ① 修改光标颜色 自定义drawable 创建cursor.xml文件 <?xml version="1.0" encoding="utf ...

  10. DEV全选多选小技巧

    var v1 = bindingSourceBase.DataSource as DataTable; foreach (DataRowView v in v1.DefaultView) { v[&q ...