dom4j
程序员文章站
2022-05-29 11:29:37
...
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 自己写了个工具类:
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();
}
}
}
上一篇: Android 在 4G 下访问 IPV6 慢的解决方案(转)
下一篇: DOM4J