我所理解的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. magento目录结构说明,Magento文件夹结构说明,Magento folder structure

    /app – 程序根目录     /app/etc – 全局配置文件目录     /app/code – 所有模块安装其模型和控制器的目录     /app/code/core – 核心代码或经过认证 ...

  2. (转载)spring mvc DispatcherServlet详解之一---处理请求深入解析

    要深入理解spring mvc的工作流程,就需要先了解spring mvc的架构: 从上图可以看到 前端控制器DispatcherServlet在其中起着主导作用,理解了DispatcherServl ...

  3. 【转】PHP ob_start() 函数介绍

    php ob_start 与 ob_end_flush() 是 php 的缓冲输出函数. ob_start([string output_callback])- 打开输出缓冲区,所有的输出信息不在直接 ...

  4. vs2010项目使用vs2013编译报错 无法打开包括文件:“winapifamily.h”

    我的老项目是vs2010下的项目.最近安装vs2013后,打开sln解决方案,调试运行报错 C:\Program Files (x86)\Windows Kits\8.0\Include\um\win ...

  5. react lazyload

    思路: DOM加载时,<img> 标签里,添加data-src路径 = src 路径, src路径 = 本地默认图片路径, DOM加载完成后,监听页面可视区域,有data-src时,就将s ...

  6. windows下搭建nginx+php+mysql环境

    一.下载需要的东西 1.nginx:http://nginx.org/en/download.html 2.php:http://php.net/downloads.php 3.mysql:(暂时先不 ...

  7. zip命令的常用选项

    zip命令的常用选项 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 大家都知道,在linux上一切皆文件,在实际生产环境中,如果我们需要部署一些系统的服务,我们会将一些软件包提前下 ...

  8. [转]IntelliJ IDEA 使用心得与常用快捷键

    IntelliJ IDEA 使用心得与常用快捷键 那种酸爽,根本说不出来—————————————————————————— by: Jimi没有BondJimi是谁? 就是洒家啊! 刚开始学习写Ja ...

  9. caffe学习笔记(一),ubuntu14.04+GPU (用Pascal VOC2007训练数据,并测试)

    把源代码跑起来了,将实验过程记录如下,用于新手入门. 今天和师兄师姐才跑通,来分享下心得.(预训练网络:ImageNet_model,训练集:PASCAL VOC2007, GPU) 首先,整个tra ...

  10. linux环境下学习使用pro*c/c++工具

    1.proc是oracle用来预编译嵌入SQL语句的c程序. 2.如何使用proc工具 在Linux环境下,首先确保gcc编译器正常使用,安装oracle数据库或者客户端,一般就会默认安装pro*c/ ...