`

JDOM 封装XML操作

    博客分类:
  • JAVA
 
阅读更多
package org.jdom;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.io.FileUtils;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.jdom.xpath.XPath;

import thtf.ebuilder.Config;

/**
 * XML简化操作类
 * 
 * @author kettas 3:11:54 PM
 */
public class XML {
	private static Document document = null;
	/**
	 * 是否存在此文件 <br>
	 * 如果不存在就抛出异常,存在就返回此文件
	 * 
	 * @param file 文件对象
	 * @return File
	 * @throws IOException
	 */
	protected static File readFile(File file) throws IOException {
		try {
			if (file.exists()) {
				return file;
			}
		} catch (Exception e) {
			throw new IOException("找不到文件" + e.getMessage());
		}
		throw new IOException("找不到文件");
	}
	
	/**
	 * <pre>
	 * 将文件转换为Document对象
	 * <code>Document doc=XML.fileToDocument(new File("c://abc/a.xml"));</code>
	 * </pre>
	 * @param file 文件路径
	 * @return Document
	 * @throws JDOMException
	 */
	public static Document fileToDocument(File file) throws JDOMException {
		try {
			document = new SAXBuilder(false).build(readFile(file));
			return document;
		} catch (IOException e) {
			document=null;
			e.printStackTrace();
			throw new JDOMException("Can't find ["+file.getPath()+"]file !");
		}catch (Exception e) {
			document=null;
			throw new JDOMException(e.getMessage());
		}
	}

	/**
	 * <pre>自定义表达式的方式来读取配置文件信息:并指定你需要操作的文件的路径
	 * <code>List list=XML.fileToDocument(new File("c://abc/a.xml"));</code></pre>
	 * @param file xml 文件路径
	 * @param express xpath查询表达式
	 * @return List&lt;Element>
	 * @throws JDOMException
	 */
	public static List queryToElementList(File file, String express)
			throws JDOMException {
		return queryToElementList(file, XPath.newInstance(express));
	}
	/**
	 * 根据您的设置的Xpath语法查询XML文件并返回查询结果
	 * <pre>
	 * File file=new File("c:\\rss.xml");
	 * List list=XML.queryToElementList(file,XPath.newInstance("/rss/channel/title"));
	 * for(Element e:list){
	 *  System.out.println("名称:"+e.getText());
	 * }
	 * </pre>
	 * @param file
	 * @param xPath
	 * @return List
	 * @throws JDOMException
	 */
	public static List queryToElementList(File file, XPath xPath)
			throws JDOMException {
		return xPath.selectNodes(fileToElement(file));
	}
	/**
	 * 根据您的设置的Xpath语法查询Document并返回查询结果
	 * <pre>
	 * Document doc=XML.fileToDocument(new File("c:/xml.xml"));
	 * List list=org.jdom.XML.queryToElementList(doc,"/rss/channel/title");
	 * for(Element e:list){
	 *  System.out.println("名称:"+e.getText());
	 * }
	 * </pre>
	 * @param doc
	 * @param express
	 * @return List
	 * @throws JDOMException
	 */
	public static List queryToElementList(Document doc, String express)
		throws JDOMException {
		return XPath.newInstance(express).selectNodes(doc);
	}
	/**
	 * 查询文件顶层节点.
	 * @param file 文件路径
	 * @return Element
	 * @throws JDOMException
	 */
	public static Element fileToElement(File file) throws JDOMException{
		return fileToDocument(file).getRootElement();
	}
	/**
	 * 查询文件所有节点.
	 * @param file
	 * @return List
	 * @throws JDOMException
	 */
	public static List fileToElementList(File file)
			throws JDOMException {
		return fileToElement(file).getChildren();
	}
	/**
	 * 自定义Xpath查询表达式,查询指定的文件并简单封装为List of Map,并返回.
	 * @deprecated
	 * @param file 需要查询的文件路径
	 * @param express xpath查询表达式
	 * @return List
	 * @throws JDOMException
	 */
	public static List<Map<String, String>> queryToMapList(File file,
			String express) throws JDOMException {
		return elementToMap(queryToElementList(file, express));
	}
	/**
	 * 自定义Xpath查询表达式,查询指定的文件并简单封装为List of Map,并返回.
	 * @deprecated
	 * @param file 需要查询的文件路径
	 * @param express xpath查询表达式
	 * @return List
	 * @throws JDOMException
	 */
	public static List<Map<String, String>> queryAttributeToMapList(File file,
			String express) throws JDOMException {
		return elementAttributeToMap(true,queryToElementList(file, express));
	}
	/**
	 * 将节点封装成为List of Map.不推荐使用.(不支持节点属性,只支持节点)
	 * @deprecated
	 * @param elementList
	 * @return List
	 */
	public static List<Map<String, String>> elementToMap(
			List elementList) {
		return elementAttributeToMap(false,elementList);
	}
	private static Map toMap(boolean readAttribute,Element element){
		int j=0;
		Map<String, String> map = new HashMap<String, String>();
		//读取所有属性
		List<Attribute> as=element.getAttributes();
		for (j=0;readAttribute&&as!=null&&j<as.size();j++) {
			Attribute _as=as.get(j);
			map.put(_as.getName(), element.getAttributeValue(_as.getName()));
		}
		//读取所有子节点
		List listElement = element.getChildren();
		for (j=0;listElement!=null&&j<listElement.size();j++) {
			Element element2=(Element)listElement.get(j);
			map.put(element2.getName(), element2.getText());
		}
		return map;
	}
	public static List<Map<String, String>> elementAttributeToMap(boolean readAttribute,
			List elementList) {
		List<Map<String, String>> list = new ArrayList<Map<String, String>>();
		for (int i=0,j=0;list!=null&&i<elementList.size();i++) {
			Element element=(Element)elementList.get(i);
			list.add(toMap(readAttribute,element));
		}
		return list;
	}
	/**
	 * 将Document对象保存为一个xml文件
	 * <pre>
	 * Document doc=new Document();
	 * Element e=new Element("r");
	 * doc.setRootDocument(e);
	 * XML.documentToFile(doc,new File("c://abc/a.xml"));</pre>
	 * @param document 对象 
	 * @param saveFile  文件保存地址
	 * @return boolean
	 */
	public static boolean documentToFile(Document document, File saveFile) {
		try {
			if(!saveFile.getParentFile().exists()){
				FileUtils.forceMkdir(saveFile.getParentFile());
			}
			FileOutputStream out1 = new FileOutputStream(saveFile);
			Format format = Format.getPrettyFormat();
			format.setEncoding(Config.DEFAULT_TYPE);
			format.setIndent("\t");
			XMLOutputter outputter = new XMLOutputter(format);
			outputter.output(document, out1);
			out1.flush();
			out1.close();
			return true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;

	}
	/**
	 * 将表达式查出的节点全部删除,并保存。
	 * <pre>
	 * XML.remove(new File("c://abc/a.xml"),"/xml");</pre>
	 * </pre>
	 * @param file XML文件路径
	 * @param express Xpath查询表达式
	 * @return boolean
	 * @throws JDOMException
	 */
	public static boolean remove(File file, String express)
			throws JDOMException {
		List eList = queryToElementList(file, express);
		for (int i=0;eList!=null&&i<eList.size();i++) {
			Element element =(Element)eList.get(i);
			element.removeContent();
		}
		return documentToFile(document, file);
	}
}

 

分享到:
评论

相关推荐

    JDOM操作xml文件的xmlBean

    ### JDOM操作XML文件的关键知识点 #### 一、JDOM简介 JDOM(Java Document Object Model)是一种基于Java的XML解析API,它提供了一种简便的方式来解析和操作XML文档。与传统的DOM相比,JDOM更加注重性能和易用性,...

    jdom-1.1.zip jdom-1.1.jar jdom.jar jdom库 jdom操作xml

    `jdom-1.1.jar`则是JDOM-1.1的核心库文件,可以直接引入到Java项目中,以便进行XML操作。 在JDOM中,XML文档被表示为一个树形结构,主要由三个基本元素组成:`Element`代表XML元素,`Attribute`表示元素的属性,而`...

    jdom 操作xml文档

    在Java中,使用JDOM进行XML操作主要涉及以下几个核心概念和步骤: 1. **构建XML文档**:首先,我们需要创建一个`DocumentBuilderFactory`实例,然后通过`newDocumentBuilder()`方法获取`DocumentBuilder`。利用`...

    使用Struts,jdom对xml数据进行操作

    2. **Action处理**:在Action类中,使用JDOM读取XML文件,获取或更新数据,然后将这些数据封装到ActionForm中。 3. **业务逻辑**:在业务层,可以编写方法处理XML数据,如查询、插入、更新和删除。 4. **显示数据**...

    用jdom解析xml

    在JSP页面中,我们可以创建JavaBean(Java组件)来封装JDOM的解析逻辑,然后在JSP页面上调用这些方法。 - **数据展示:** 解析XML后,可以使用JSP的EL(表达式语言)或JSTL(JavaServer Pages Standard Tag Library...

    JDOM解析本地XML

    JDOM是Java中一个专门用来处理XML的库,它提供了一种高效、灵活且完全符合Java语言习惯的方式来读取、写入和操作XML文档。下面我们将详细探讨JDOM解析本地XML的相关知识点。 首先,JDOM的核心概念包括`Element`、`...

    JDOM-XML解析技术

    JDOM通过`Element`类来代表XML元素,`Attribute`类表示属性,`Document`类则封装整个XML文档。以下是一个创建XML文档的例子: ```java import org.jdom2.Document; import org.jdom2.Element; public class ...

    基于JDOM的XML技术用于“树型”数据结构的研究.pdf

    JDOM以一种简洁的接口封装了XML文档的节点,每个节点都对应XML文档中的一个元素,这大大简化了对XML文档的操作过程。 4. 使用JDOM处理XML文档的过程:主要包括将计算机信息的树型结构保存至XML文档和读取XML文档...

    JDOM解析XML

    3. **Text(文本)**:XML元素内部可以包含文本内容,JDOM中的`Text`类用来封装这些文本。 4. **Document(文档)**:整个XML文档由根元素和一些可选的声明组成。在JDOM中,`Document`类表示整个XML文档。 **JDOM...

    xml转对象封装的简单与复杂xml的转化写法

    标题提到的"xml转对象封装的简单与复杂xml的转化写法"主要涉及以下知识点: 1. **JDOM库**:JDOM是Java Document Object Model的缩写,它提供了一种在内存中表示XML文档的方式,通过创建SAXBuilder或DOMBuilder实例...

    dom4j-jdom封装和解析例子

    dom4j,jsoup,jdom,w3cdom,xstream使用代码工程 package ivyy.taobao.com.dom4j; import ivyy.taobao.com.entity.Address; import ivyy.taobao.com.entity.Location; import ivyy.taobao.com.entity.Point; import ...

    封装了读取XML数据的java类

    封装XML读取的Java类一般包括以下几个主要部分: 1. **类定义**:创建一个类,例如命名为`XmlDataReader`,并定义必要的属性和方法。属性可能包括XML文件路径,而方法可能包含`readXml()`、`parseElement()`等,...

    jdom 1.1 版本

    JDOM 1.1对命名空间的支持得到了加强,开发者可以通过API轻松处理XML命名空间,包括声明、引用和操作。 5. **错误处理与验证** JDOM 1.1提供了良好的错误处理机制,当XML文档结构不正确或不符合DTD(Document Type...

    jdom-1.1.3.zip

    JDOM是Java平台上的一个解析、创建和操作XML文档的库,它为开发者提供了高效且易于使用的API来处理XML文档。本文将深入探讨JDOM 1.1.3版本,解析其核心功能和应用场景。 JDOM 1.1.3是一个Java实现的DOM(Document ...

    jdom JAR包

    通过理解JDOM的核心概念和操作方式,我们可以轻松地在Java应用中集成XML功能,无论是构建XML文档,还是解析和修改已有的XML资源。而提供的"jdom.jar"文件就是JDOM库的实现,将其引入项目,即可享用JDOM提供的全部...

    jdom_treeList.rar

    1. TestTTT.java:通常,以"Test"开头的Java文件是用来进行单元测试的,因此这个文件可能包含了对某个功能或方法的测试代码,特别是针对XML操作的测试。它可能使用了JUnit等测试框架,通过具体的测试用例验证JDOM...

    jdom包下载

    `Element`类代表XML文档中的元素,`Attribute`类表示元素的属性,而`Document`类则封装了整个XML文档的结构。通过这些类,开发者可以方便地构建XML树形结构,进行添加、删除和修改操作。 在下载JDOM包时,通常会...

    XML文件解析封装工具类

    `XmlObject.java` 可能是用于表示Java对象的类,而`XmlParser.java` 是解析和封装XML的工具类。 在`XmlParser.java` 中,主要涉及到以下核心技术: 1. **DOM解析器(Document Object Model)**:这是最常见的XML...

    jdom开发过程详细资料(整合版)

    在JDOM中,`Element`类代表XML的元素,`Attribute`类表示元素的属性,`Document`类则封装了整个XML文档。通过这些类,我们可以创建复杂的XML结构,并进行读写操作。例如,我们可以使用`DocumentBuilderFactory`和`...

    jdom资料

    **JDOM概述** JDOM(Java Document Object Model)是一个用纯Java实现的...通过阅读《jdom中文使用.doc》、《jdom操作XML.doc》等文档,开发者可以深入理解JDOM的使用细节和最佳实践,从而更好地利用JDOM进行XML处理。

Global site tag (gtag.js) - Google Analytics