`
royzhou1985
  • 浏览: 254486 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

dom4j

    博客分类:
  • Java
阅读更多
    DOM4J是dom4j.org出品的一个开源XML解析包,它的网站中这样定义:
Dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP.
Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。
DOM4J使用起来非常简单。只要你了解基本的XML-DOM模型,就能使用。

看了基本的API 自己写了个工具类:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class XmlUtil {

	Document document = null;

	/**
	 * 构造函数中通过文件名生成文档对象
	 * @param fileName
	 */
	public XmlUtil(String fileName) {
		SAXReader saxReader = new SAXReader();
		try {
			this.document = saxReader.read(new File(fileName));
		} catch (DocumentException e) {
			System.out.println("初始化文档对象失败..............");
			e.printStackTrace();
		}
	}

	/**
	 * 构造函数中通过文件生成文档对象
	 * @param file
	 */
	public XmlUtil(File file) {
		SAXReader saxReader = new SAXReader();
		try {
			this.document = saxReader.read(file);
		} catch (DocumentException e) {
			System.out.println("初始化文档对象失败..............");
			e.printStackTrace();
		}
	}

	/**
	 * 构造函数中通过输入流获取文档对象
	 * @param fis
	 */
	public XmlUtil(FileInputStream fis) {
		SAXReader saxReader = new SAXReader();
		try {
			this.document = saxReader.read(fis);
		} catch (DocumentException e) {
			System.out.println("初始化文档对象失败..............");
			e.printStackTrace();
		}
	}

	/**
	 * 获取根节点
	 * @param document
	 * @return
	 */
	public Element getRootElement() {
		Element element = document.getRootElement();
		return element;
	}

	/**
	 * 获取一个节点下的所有子节点
	 * @param parentElement
	 * @return
	 */
	public List<Element> getChildElements(Element parentElement) {
		List<Element> childElements = new ArrayList<Element>();
		Iterator<Element> iter = parentElement.elementIterator();
		while (iter.hasNext()) {
			childElements.add(iter.next());
		}
		return childElements;
	}

	/**
	 * 获取一个节点下名称为elementName的节点集合
	 * @param parentElement
	 * @param elementName
	 * @return
	 */
	public List<Element> getChildElements(Element parentElement,
			String elementName) {
		List<Element> childElements = new ArrayList<Element>();
		Iterator<Element> iter = parentElement.elementIterator();
		while (iter.hasNext()) {
			childElements.add(iter.next());
		}
		return childElements;
	}

	/**
	 * 获取一个节点的所有属性
	 * @param element
	 * @return
	 */
	public Map<String, String> getAttributes(Element element) {
		Map<String, String> attributes = new HashMap<String, String>();
		Iterator<Attribute> iter = element.attributeIterator();
		while (iter.hasNext()) {
			Attribute attribute = iter.next();
			attributes.put(attribute.getName(), attribute.getStringValue());
		}
		return attributes;
	}

	/**
	 * 递归遍历所有子节点 不包括text内容
	 * @param element
	 * @param elements
	 */
	public void treeWalk(Element element, List<Node> elements) {
		for (int i = 0; i < element.nodeCount(); i++) {
			Node node = element.node(i);
			if (node instanceof Element) {
				elements.add(node);
				treeWalk((Element) node, elements);
			}
		}
	}

	/**
	 * 根据xpath查找Nodes
	 * @param xPath
	 * @return
	 */
	public List<Node> selectNodes(String xPath) {
		List<Node> nodes = new ArrayList<Node>();
		nodes = document.selectNodes(xPath);
		return nodes;
	}

	/**
	 * 查找所有超链接
	 * @param document
	 * @throws DocumentException
	 */
	public List<String> findLinks(Document document) throws DocumentException {
		List<String> links = new ArrayList<String>();
		Iterator<Node> iter = document.selectNodes("//a/@href").iterator();
		while (iter.hasNext()) {
			links.add(iter.next().getStringValue());
		}
		return links;
	}
	
	/**
	 * 定义一个XML文档对象
	 * @return
	 */
	public static Document createDocument() {
		Document document = DocumentHelper.createDocument();
		return document;
	}
	
	/**
	 * 从xml字符串生成文档对象
	 * @param str
	 * @return
	 * @throws DocumentException
	 */
	public static Document str2Xml(String str) throws DocumentException {
		Document document = DocumentHelper.parseText(str);
		return document;
	}

	/**
	 * 从文档对象转换成str
	 * @param document
	 * @return
	 */
	public static String xml2Str(Document document) {
		String str = document.asXML();
		return str;
	}

	/**
	 * 生成xml文件
	 * 美化格式
	 * @param document 文档对象
	 * @param filePath 存放路径
	 * @param encoding 编码格式
	 */
	public static void writeXml(Document document, String output, String encoding) {
		try {
			OutputFormat format = OutputFormat.createPrettyPrint();
			if(encoding==null) {
				format.setEncoding("UTF-8");
			} else {
				format.setEncoding(encoding);
			}
			XMLWriter writer = new XMLWriter(new FileWriter(output), format );
			writer.write(document);
			writer.close();
		} catch (Exception e) {
			System.out.println("生成xml文件失败..........");
			e.printStackTrace();
		} 
	}
	
	/**
	 * 生成xml文件
	 * 压缩格式
	 * @param document 文档对象
	 * @param filePath 存放路径
	 * @param encoding 编码格式
	 */
	public static void writeCompactXml(Document document, String output, String encoding) {
		try {
			OutputFormat format = OutputFormat.createCompactFormat();
			if(encoding==null) {
				format.setEncoding("UTF-8");
			} else {
				format.setEncoding(encoding);
			}
			XMLWriter writer = new XMLWriter(new FileWriter(output),format);
			writer.write(document);
			writer.close();
		} catch (Exception e) {
			System.out.println("生成xml文件失败..........");
			e.printStackTrace();
		} 
	}
}
分享到:
评论

相关推荐

    DOM4J jar包 xml解析 所有的dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1包 导入直接使用

    在项目中使用DOM4J时,只需将相应的jar包(如dom4j-1.6.1.jar、dom4j-2.0.2.jar或dom4j-2.1.1.jar)导入到类路径中,即可开始利用其功能处理XML文档。导入后,可以按照DOM4J提供的API进行编程,快速实现XML的读写...

    dom4j dom4j dom4j dom4j

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单易行。在Java世界中,DOM4J是与DOM、SAX和JDOM等其他XML处理库并驾齐驱的一个选择,尤其在处理...

    dom4j_dom4j1.6.1安装包_

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高效的API,使得XML的解析、创建、查询和修改变得更为简单。在本文中,我们将深入探讨DOM4J 1.6.1版本的安装及其在Maven项目中的应用。 首先,DOM4J...

    dom4j-1.6.1 与 dom4j-2.0.0-ALPHA

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高效的API,使得XML的解析、创建、修改和查询变得简单。这次我们有两个版本的DOM4J库:1.6.1和2.0.0-ALPHA。这两个版本在功能、性能和API设计上都有所...

    dom4j_1.6.1.jar dom4j_2.1.0.jar

    标题提及的"dom4j_1.6.1.jar"和"dom4j_2.1.0.jar"是两个不同版本的DOM4J库的Java档案文件,DOM4J是一个非常流行的Java XML API,用于处理XML文档。这两个版本的差异在于功能、性能优化和可能存在的bug修复。描述中...

    dom4j-2.1.1-API文档-中英对照版.zip

    赠送jar包:dom4j-2.1.1.jar; 赠送原API文档:dom4j-2.1.1-javadoc.jar; 赠送源代码:dom4j-2.1.1-sources.jar; 赠送Maven依赖信息文件:dom4j-2.1.1.pom; 包含翻译后的API文档:dom4j-2.1.1-javadoc-API文档-...

    dom4j所依赖的所有jar包

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了简单而直观的API,使得开发者可以方便地读取、写入、修改以及操作XML文件。DOM4J 1.6.1是这个库的一个稳定版本,发布于较早时期,但依然广泛应用于许多Java...

    dom4j-2.1.3.zip

    另一份重要的资源是"dom4j-2.1.3-sources.jar",它提供了DOM4J库的源代码,允许开发者深入研究DOM4J的内部实现,对于理解DOM4J的工作原理、进行扩展或者调试都是不可或缺的。通过阅读源代码,开发者可以学习到如何...

    dom4j1.1-1.6.1.rar

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单。DOM4J的名字来源于“Document Object Model for Java”,但它并不仅仅是一个DOM实现,它还包含...

    dom4j需要的包

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单。DOM4J的名字来源于“Document Object Model for Java”,它采用面向对象的设计思想,提供了...

    dom4j-2.0.3.zip

    《深入解析DOM4J——基于Java的XML处理框架》 DOM4J,作为一个强大的Java XML API,是处理XML文档的主流工具之一。它提供了一套简单而高效的方式来操作XML文档,包括读取、写入、修改和遍历XML结构。在Java开发中,...

    dom4j-2.1.1-API文档-中文版.zip

    赠送jar包:dom4j-2.1.1.jar; 赠送原API文档:dom4j-2.1.1-javadoc.jar; 赠送源代码:dom4j-2.1.1-sources.jar; 赠送Maven依赖信息文件:dom4j-2.1.1.pom; 包含翻译后的API文档:dom4j-2.1.1-javadoc-API文档-...

    dom4j.jar 下载

    DOM4J是一个强大的Java库,专门用于处理XML文档。它是一个灵活且高性能的XML解析器,提供了丰富的API来创建、修改和操作XML数据。在Java应用程序中,DOM4J作为一个流行的选择,尤其在处理复杂的XML结构时,因为它...

    所有版本的dom4j工具包

    标题提到的"所有版本的dom4j工具包"表明这是一个包含多版本DOM4J库的集合,可能包括了从早期到较新的一些版本,如dom4j-1.4.jar、dom4j-1.6.1.jar和dom4j-1.5.2.jar。这些不同版本的库可能分别对应于不同的功能特性...

    dom4j 2.1.1

    DOM4J 2.1.1 是一个针对Java平台的高效、开源的XML处理库,其全称为“Document Object Model for Java”。这个库提供了一系列强大的API,使得开发人员能够轻松地解析、创建、修改和操作XML文档。XML(eXtensible ...

    dom4j所需要的所有jar包

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高效的方式来解析、创建、操作和理解XML数据。这个库在Java开发中广泛使用,因为它提供了比标准Java DOM API更简单、性能更好的XML处理方式。以下是...

    org.dom4j.jar

    当我们遇到“java.lang.ClassNotFoundException: org.dom4j.DocumentException”的错误提示时,这通常意味着系统中缺少了DOM4j库,只需将“org.dom4j.jar”添加到项目类路径中即可解决此问题。 DOM4J是基于DOM和SAX...

    DOM4J帮助文档及使用教程

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高性能的API,使得在Java应用程序中解析、创建、修改和操作XML文档变得容易。DOM4J因其易用性和丰富的功能集,在Java社区中广受欢迎,尤其在处理大型...

    DOM4J 的使用

    DOM4J 的使用 DOM4J 是一个开源的 XML 解析包,由 dom4j.org 出品,应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM、SAX 和 JAXP。DOM4J 的主要特点是使用大量的接口,所有主要接口都在 org.dom4j 里面定义...

Global site tag (gtag.js) - Google Analytics