`

采用dom4j解析xml工具( 转载)

 
阅读更多
在实际的开发中,我们通常会设计到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解析xml详解

    DOM4J是一个由dom4j.org开发的开源XML解析包,专为Java平台设计,它不仅支持DOM、SAX和JAXP标准,还巧妙地融入了Java集合框架,使其成为Java开发者在处理XML数据时的强大工具。DOM4J的最大亮点在于其简洁易用的API...

    Dom4j解析XML文档.doc

    在本文中,我们将深入探讨如何使用DOM4J来解析和操作XML文档。 首先,要使用DOM4J,你需要下载其库文件。官方站点位于http://www.dom4j.org,你可以在这里找到最新的DOM4J包,例如dom4j-1.6.1.zip。解压缩后,你会...

    使用 dom4j 解析 XML

    使用 dom4j 解析 XML dom4j 解析 XML dom4j解析xml

    dom4j 解析写入xml

    1、xml文档解析 2、 dom4j解析xml 3、实现xml文件解析 xml字符串解析 xml MAP键值对解析 4、实现xml写入与生成文件

    java dom4j解析xml

    Java DOM4J解析XML是一种常见的处理XML文档的技术,它提供了灵活且高效的API,使得开发者能够方便地读取、写入、修改以及操作XML文件。DOM4J是Java中一个非常强大的XML处理库,它结合了DOM、SAX和JDOM的优点,同时也...

    dom4j解析xml文件的压缩包

    5. **事件驱动解析(SAX)**:除了传统的DOM解析外,DOM4J还支持SAX解析器,这种解析方式适用于处理大型XML文件,因为它不需要一次性加载整个文档到内存。 6. **Namespace支持**:DOM4J提供了对XML命名空间的全面...

    DOM4J 解析XML

    DOM4J不仅是一个解析XML的工具,还可以用作XML数据绑定库,将XML数据映射到Java对象。此外,DOM4J还支持Java 5的注解,这使得XML文档的处理更加直观和简洁。结合其灵活性和高性能,DOM4J成为Java开发人员处理XML文档...

    dom4j解析xml实例

    **DOM4J解析XML实例详解** 在Java编程中,处理XML文档是一项常见的任务。DOM4J是一个非常流行的、强大的Java XML API,它提供了灵活且高效的方式来解析、创建、修改XML文档。本文将深入探讨如何使用DOM4J进行XML...

    dom4j解析xml

    ### DOM4J解析XML知识点详解 #### 一、DOM4J简介 DOM4J是一个Java库,用于处理XML文档。它的设计目标是为了提供一个简单、易于使用的API来处理XML文件,同时保持性能上的优势。与Java标准库中的DOM实现相比,DOM4J...

    dom4j解析XML所需jar包

    总结来说,DOM4J是一个全面且易用的XML处理工具,广泛应用于Java开发中。通过`dom4j-1.6.1.jar`和`jaxen-1.1.1.jar`这两个jar包,开发者可以获得完整的DOM4J功能,实现XML的解析、构建、查询和转换等一系列操作。

    dom4j解析xml文件(增删改查)

    在“dom4j解析xml文件(增删改查)”这个主题中,我们将深入探讨如何使用DOM4J来实现XML文档的四种基本操作:增加元素、删除元素、更新元素内容以及查询元素。 首先,让我们了解DOM4J的基本用法。在解析XML文件时,...

    dom4j 解析xml实例

    在这个实例中,我们将深入探讨如何使用DOM4J解析XML文件,并通过`Dom4jTest1.java`这个示例程序来理解其工作原理。 首先,我们需要了解XML(Extensible Markup Language)是一种标记语言,常用于存储和传输数据。...

    自己写的一个dom4j解析xml文件工具类

    自己写的一个dom4j解析xml文件工具类

    dom4j 解析(读取) xml 节点数据

    总结起来,DOM4J是处理XML的优秀工具,尤其适合解析具有任意深度的XML结构。通过`SAXReader`解析XML文件,`Document`和`Element`对象提供了一种直观的方式来访问和操作XML数据。结合递归遍历,我们可以轻松地处理...

    DOM4J xml解析工具

    总之,DOM4J是Java世界中处理XML的强大工具,它集成了多种解析方式,提供了丰富的功能,且具有良好的性能和社区支持,是XML处理的首选库之一。无论是小型项目还是大型系统,DOM4J都能提供可靠的支持。

    dom4j解析XML

    本人自己研究的解析方法,主要用dom4j解析XML文件,进而获取里面的信息

    dom4j解析xml文件代码示例

    在本示例中,我们将深入探讨如何使用DOM4J解析XML文件,以`CacheInit.java`作为我们的核心代码示例,并参考`emailTemplateConfig.xml`作为实际操作的对象。 首先,让我们了解XML(eXtensible Markup Language)。...

    使用dom4j解析XML

    【使用dom4j解析XML】 dom4j是一个强大的开源XML框架,它提供了处理XML文档的各种功能,包括解析、...通过学习和熟练掌握dom4j,开发者可以更轻松地处理XML数据,特别是在Java环境中,dom4j成为了一个不可或缺的工具。

    Dom4j解析XML

    使用Dom4j解析XML文件的jar包.

Global site tag (gtag.js) - Google Analytics