在实际的开发中,我们通常会设计到xml文件的解析,其中dom4j就是一个不错的选择.dom4j的性能和易用性方面都是屈指可数的.为了更加方便使用dom4j解析xml文件,本人写出了一个xml的解析工具类, 从更大粒度上支持xml文件的解析.该工具支持通配符号,应该算的上是一个很方便和功能强健的类.
/**
* Author: crazy_rain
* Date: 2007-2-14
* Time: 上午09:45:17
* Introduction:处理xml 文件的工具类
*/
public class XMLUtil {
/** ************解析xml 元素时需要的变量 **************** */
private static final Log log = LogFactory.getLog(XMLUtil.class);
private static SAXReader saxReader = new SAXReader();
private XMLUtil(){}
/**
* 将xml元素输出到控制台
*
* @param xml
*/
public static void dump(Node xml) {
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");
XMLWriter writer;
try {
writer = new XMLWriter(System.out, format);
writer.write(xml);
writer.flush();
// do not call writer.close(); !
} catch (Throwable t) {
// otherwise, just dump it
System.out.println(xml.asXML());
}
}
/**
* 将document 对象写入指定的文件
*
* @param xml
* @param fileName
*/
public static void dumpToFile(Node xml, String fileName) {
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");
try {
XMLWriter writer = new XMLWriter(new FileWriter(fileName), format);
writer.write(xml);
writer.close();
} catch (IOException e) {
log.error("将document 对象写入指定的文件时出现IO错误 !", e);
}
}
/**
* 获得Xml 文档对象
*
* @param xmlFile
* 指向xml 文件的引用
* @return xmlDoc 从文件读取xml Document
*/
public static Document read(File xmlFile) {
Document document = null;
try {
document = saxReader.read(xmlFile);
} catch (DocumentException e) {
log.error("通过指向xml文件的文件获得Document对象时出错 !", e);
}
return document;
}
/**
* 通过xml 文件的名字读取Document对象
*
* @param xmlFileName
* @return Document
*/
public static Document read(String xmlFileName) {
return read(new File(xmlFileName));
}
/**
* 通过指向xml 文件的URL获得Document对象
*
* @param url
* @return Document
*/
public static Document read(URL url) {
Document document = null;
try {
document = saxReader.read(url);
} catch (DocumentException e) {
log.error("通过指向xml文件的URL获得Document对象时出错...", e);
}
return document;
}
/**
* 将xml Node 对象转换成 String
*
* @param node
* @return string
*/
public static String NodeToString(Node node) {
return node.asXML();
}
/**
* 将字符串解析成Node
*
* @param xmlString
* @return node
*/
public static Node StringToNode(String xmlString) {
Node node = null;
try {
node = DocumentHelper.parseText(xmlString);
} catch (DocumentException e) {
log.error("将字符串解析成doc时出错", e);
}
return node;
}
/**
* 根据给定路径查询给定 xml 元素的子元素
*
* @param parent
* 父节点元素
* @param childPath
* 相对与父节点的子节点路径,路径组成部分之间用"/"分割,支持通配符号"*"
* @return child 子节点元素
*/
public static Element child(Element parent, String childPath) {
String names[] = childPath.split("/");
Element child = parent;
for (String name : names) {
if (name.equals("*")) {
child = (Element) child.elements().get(0);
} else {
child = child.element(name);
}
if (child == null) {
log.debug("未找到指定元素[" + name + "],返回null...");
}
}
return child;
}
/**
* 根据给定路径查询给定 xml 元素的子元素
*
* @param parent
* 父节点元素
* @param childPath
* 相对与父节点的子节点路径,路径组成部分之间用"/"分割,支持通配符号"*"
* @param index 子节点在兄弟列表中的位置
* @return child 子节点元素
*/
public static Element child(Element parent, String childPath,int index) {
String names[] = childPath.split("/");
Element child = parent;
for (String name : names) {
if (name.equals("*")) {
child = (Element) child.elements().get(index);
} else {
child = child.element(name);
}
if (child == null) {
log.debug("未找到指定元素[" + name + "],返回null...");
}
}
return child;
}
/**
* 查询父节点的子节点的属性值
*
* @param parent
* 父节点
* @param attributePath
* 子节点属性相对于父节点的路径,路径各组成部分用"/"分割, 属性名称前要添加"@"符号
* 支持通配符号"*"
* @return 子节点的属性值,如果找不到返回null
*/
public static String childAttribute(Element parent, String attributePath) {
if (attributePath.indexOf('@') == -1)
throw new IllegalArgumentException("属性查询要使用 '@'");
int slashLoc = attributePath.lastIndexOf('/');
String childPath = attributePath.substring(0, slashLoc);
Element child = child(parent, childPath);
String attributeName = attributePath.substring(slashLoc + 2);
String attributeValue = child.attributeValue(attributeName);
if (null == attributeValue) {
log.debug("未找到指定属性[" + attributeName + "],返回null...");
}
return attributeValue;
}
/**
* 根据相对于父节点的子节点路径,查询子节点列表
*
* @param parent
* 父节点
* @param childrenPath
* 子节点路径
* @return children 子节点列表
*/
public static List children(Element parent, String childrenPath) {
int slashLoc = childrenPath.lastIndexOf('/');
Element child = child(parent, childrenPath.substring(0, slashLoc));
if (child == null)
return Collections.EMPTY_LIST;
String childrenName = childrenPath.substring(slashLoc + 1);
List children;
if (childrenName.equals("*")) {
children = child.elements();
} else {
children = child.elements(childrenName);
}
return children;
}
/**
* 创建一个xml 元素
* @param name xml 元素的名称
* @param attributes 元素属性
* @param ns 命名空间
* @return
*/
public static Element createElement(String name,Map<String,String> attributes,Namespace ns){
Element element = null;
if(ns == null){
element = DocumentHelper.createElement(name);
}else{
element = DocumentHelper.createElement(new QName(name,ns));
}
for(String key: attributes.keySet()){
element.addAttribute(key, attributes.get(key));
}
return element;
}
/**
* 创建xml 文档
* @param nsArray 命名空间数组
* @param root
* @return
*/
public static Document createDocument(Namespace[]nsArray,Element root){
Document document = DocumentHelper.createDocument();
if(root != null){
document.add(root);
}
if(nsArray != null && nsArray.length > 0){
for(Namespace ns : nsArray){
document.add(ns);
}
}
return document;
}
}
分享到:
相关推荐
DOM4J是一个由dom4j.org开发的开源XML解析包,专为Java平台设计,它不仅支持DOM、SAX和JAXP标准,还巧妙地融入了Java集合框架,使其成为Java开发者在处理XML数据时的强大工具。DOM4J的最大亮点在于其简洁易用的API...
在本文中,我们将深入探讨如何使用DOM4J来解析和操作XML文档。 首先,要使用DOM4J,你需要下载其库文件。官方站点位于http://www.dom4j.org,你可以在这里找到最新的DOM4J包,例如dom4j-1.6.1.zip。解压缩后,你会...
使用 dom4j 解析 XML dom4j 解析 XML dom4j解析xml
1、xml文档解析 2、 dom4j解析xml 3、实现xml文件解析 xml字符串解析 xml MAP键值对解析 4、实现xml写入与生成文件
Java DOM4J解析XML是一种常见的处理XML文档的技术,它提供了灵活且高效的API,使得开发者能够方便地读取、写入、修改以及操作XML文件。DOM4J是Java中一个非常强大的XML处理库,它结合了DOM、SAX和JDOM的优点,同时也...
5. **事件驱动解析(SAX)**:除了传统的DOM解析外,DOM4J还支持SAX解析器,这种解析方式适用于处理大型XML文件,因为它不需要一次性加载整个文档到内存。 6. **Namespace支持**:DOM4J提供了对XML命名空间的全面...
DOM4J不仅是一个解析XML的工具,还可以用作XML数据绑定库,将XML数据映射到Java对象。此外,DOM4J还支持Java 5的注解,这使得XML文档的处理更加直观和简洁。结合其灵活性和高性能,DOM4J成为Java开发人员处理XML文档...
**DOM4J解析XML实例详解** 在Java编程中,处理XML文档是一项常见的任务。DOM4J是一个非常流行的、强大的Java XML API,它提供了灵活且高效的方式来解析、创建、修改XML文档。本文将深入探讨如何使用DOM4J进行XML...
### DOM4J解析XML知识点详解 #### 一、DOM4J简介 DOM4J是一个Java库,用于处理XML文档。它的设计目标是为了提供一个简单、易于使用的API来处理XML文件,同时保持性能上的优势。与Java标准库中的DOM实现相比,DOM4J...
总结来说,DOM4J是一个全面且易用的XML处理工具,广泛应用于Java开发中。通过`dom4j-1.6.1.jar`和`jaxen-1.1.1.jar`这两个jar包,开发者可以获得完整的DOM4J功能,实现XML的解析、构建、查询和转换等一系列操作。
在“dom4j解析xml文件(增删改查)”这个主题中,我们将深入探讨如何使用DOM4J来实现XML文档的四种基本操作:增加元素、删除元素、更新元素内容以及查询元素。 首先,让我们了解DOM4J的基本用法。在解析XML文件时,...
在这个实例中,我们将深入探讨如何使用DOM4J解析XML文件,并通过`Dom4jTest1.java`这个示例程序来理解其工作原理。 首先,我们需要了解XML(Extensible Markup Language)是一种标记语言,常用于存储和传输数据。...
自己写的一个dom4j解析xml文件工具类
总结起来,DOM4J是处理XML的优秀工具,尤其适合解析具有任意深度的XML结构。通过`SAXReader`解析XML文件,`Document`和`Element`对象提供了一种直观的方式来访问和操作XML数据。结合递归遍历,我们可以轻松地处理...
总之,DOM4J是Java世界中处理XML的强大工具,它集成了多种解析方式,提供了丰富的功能,且具有良好的性能和社区支持,是XML处理的首选库之一。无论是小型项目还是大型系统,DOM4J都能提供可靠的支持。
本人自己研究的解析方法,主要用dom4j解析XML文件,进而获取里面的信息
在本示例中,我们将深入探讨如何使用DOM4J解析XML文件,以`CacheInit.java`作为我们的核心代码示例,并参考`emailTemplateConfig.xml`作为实际操作的对象。 首先,让我们了解XML(eXtensible Markup Language)。...
【使用dom4j解析XML】 dom4j是一个强大的开源XML框架,它提供了处理XML文档的各种功能,包括解析、...通过学习和熟练掌握dom4j,开发者可以更轻松地处理XML数据,特别是在Java环境中,dom4j成为了一个不可或缺的工具。
使用Dom4j解析XML文件的jar包.