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 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();
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值