`
royzhou1985
  • 浏览: 249960 次
  • 性别: 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 dom4j dom4j dom4j

    dom4j dom4j dom4j dom4j dom4j dom4j

    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-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包 xml解析 所有的dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1包 导入直接使用

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

    JavaEE源代码 dom4j-1.6.1

    JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源...

    资源jar包dom4j-1.6.1.rar

    dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的...

    Dom4j_使用简介

    Dom4j_使用简介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 ...

    dom4j-1.6.1 与 dom4j-2.0.0-ALPHA

    dom4j-1.6.1.zip与 dom4j-2.0.0-ALPHA-2.jar

    dom4j_dom4j1.6.1安装包_

    maven dom4j 1.6.1安装包

    dom4j常用方法

    dom4j常用方法 i.SAXReader sr = new SAXReader(); 生成解析器对象 ii.解析器对象.read(file对象); 解析文件生成Document对象 iii.文档对象.getRootElement() 获取跟元素节点 iv.元素节点.elements() 获取到指定...

    Dom4j 1.6.1 JAVA API

    dom4j帮助文档 官方API All Classes Packages org.dom4j org.dom4j.bean org.dom4j.datatype org.dom4j.dom org.dom4j.dtd org.dom4j.io org.dom4j.jaxb org.dom4j.rule org.dom4j.rule.pattern org.dom...

    dom4j-1.6.1.jar (dom4j) 欢迎下载

    dom4j-1.6.1.jar,Dom4j是一个Java的XML API接口,是jdom的进化版,dom4j基本用来读写xml文件,是一个十分优秀的JavaXML API接口

    dom4j api 参考手册

    org.dom4j.io Provides input and output via SAX and DOM together with writing dom4j objects to streams as XML text. org.dom4j.jaxb org.dom4j.rule A Pattern based XML rule engine which implements the ...

    dom4j框架解析教程

    dom4j技术教程,dom4j是一个很好的解析xml文档的框架

    dom4j-1.6.1-7

    dom4j,用来处理xml

    DOM4J帮助文档及使用教程

    这个压缩包是一个关于DOM4J的压缩包,里面包含了DOM4J的帮助文档,DOM4J的使用教程,以及DOM4J这个JAVA包。保证这个压缩包是网上面最全的有关DOM4J的文档。

    Dom4j常用jar包

    Dom4j常用jar包Dom4j常用jar包Dom4j常用jar包Dom4j常用jar包Dom4j常用jar包Dom4j常用jar包

    DOM4j属性的详细介绍及相关的例子

    介绍DOM4J的主要接口的使用方法,Elementorg.dom4j.Attribute : Attribute接口定义了XML文件的属性 org.dom4j.Branch:Branch为能够包含子节点的节点如XML元素和文档定义了一个公共为 org.dom4j.CDATA : CDATA定义了...

    Dom4j解析XML文档.doc

    Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc

    DOM4J的jar包和API

    Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。 Dom4j是一...

Global site tag (gtag.js) - Google Analytics