[java]操作XML

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.xml.sax.SAXException;

public class XmlUtil {
	private Document document;

	List<Element> elements = new ArrayList<Element>();

	public static XmlUtil getInstance() {
		return new XmlUtil();
	}

	private XmlUtil() {
	}

	public void load(String url) throws Exception {
		FileInputStream in = new FileInputStream(url);
		load(in);
	}

	public void load(File file) throws Exception {
		FileInputStream in = new FileInputStream(file);
		load(in);
	}

	public void load(InputStream in) throws Exception {
		try {
			SAXReader reader = new SAXReader();

			document = reader.read(in);
			this.elements = getAllElements(getRootElement());
		} finally {
			in.close();
		}

	}

	public static Document createDocument() {
		Document document = DocumentFactory.getInstance().createDocument();
		document.setXMLEncoding("GBK");
		return document;
	}

	public List<Element> getAllElements(Element element) {
		List<Element> elements = new ArrayList<Element>();
		if (element.elements().size() == 0) {
			elements.add(element);
			return elements;
		} else {
			elements.add(element);
			for (Object o : element.elements()) {
				Element e = (Element) o;
				elements.addAll(getAllElements(e));
			}
			return elements;
		}
	}

	public List findByPath(String path) {
		return getRootElement().elements(path);
	}

	public Element findById(String id) {
		List<Element> ele = findByAttribute("id", id);
		if (ele.size() > 0)
			return ele.get(0);
		return null;
	}

	public List<Element> findByAttribute(String attrName, String attrValue) {
		List<Element> ele = new ArrayList<Element>();
		for (Element e : this.elements) {
			Attribute attr = e.attribute(attrName);
			if (attr != null && attrValue.equals(attr.getValue())) {
				ele.add(e);
			}
		}
		return ele;
	}

	public List<Element> getElements() {
		return elements;
	}

	public void setElements(List<Element> elements) {
		this.elements = elements;
	}

	public int findElementIndex(Element e) {
		int index = this.elements.indexOf(e);
		return index > 0 ? index - 1 : index;
	}

	public void updateElement(Element element, int index) {
		Element e = this.elements.get(index);
		this.elements.set(index, element);
		removeElement(index);
		e.getParent().add(element);
	}

	public void addElement(Element parentElement, Element e) {
		parentElement.add(e);
		this.elements.add(e);
	}

	public boolean removeElement(Element e) {

		this.elements.remove(e);
		return e.getParent().remove(e);
	}

	public boolean removeElement(int index) {
		this.elements.remove(index);
		Element e = this.elements.get(index);
		return e.getParent().remove(e);

	}

	public Element getRootElement() {
		return document.getRootElement();
	}

	public String getEncoding() {
		return document.getXMLEncoding();
	}

	public void setEncoding(String encoding) {
		document.setXMLEncoding(encoding);
	}

	public Document getDocument() {
		return document;
	}

	public void setDocument(Document document) {
		this.document = document;
		this.elements = getAllElements(getRootElement());
	}

	public void save(String url) throws SAXException, IOException {
		FileOutputStream out = new FileOutputStream(url);
		save(out);
		out.close();
	}

	public void save(File file) throws SAXException, IOException {
		FileOutputStream out = new FileOutputStream(file);
		save(out);
		out.close();
	}

	public void save(OutputStream out) throws SAXException, IOException {
		out.write(document.asXML().getBytes());
	}

	public void dispose() {
		this.elements.clear();
	}
}
时间: 2024-10-09 00:56:56

[java]操作XML的相关文章

Java操作XML的JAXB工具

在java中操作XML的工作中中,比较方便的工具是JAXB(Java Architecture for XML Binding). 利用这个工具很方便生成XML的tag和Java类的对应关系.参照网上的资料,简单说明一下java操作xml的一些东西. 1.先定义一个XML Schema文件.比如: [html] view plain copy print? <?xml version="1.0" encoding="UTF-8" standalone=&quo

java操作xml的一个小例子

最近两天公司事比较多,这两天自己主要跟xml打交道,今天更一下用java操作xml的一个小例子. 原来自己操作xml一直用这个包:xstream-1.4.2.jar.然后用注解的方式,很方便,自己只要定义好bean的层次结构就可以了,第三方包会自动生成和解析xml. 但是今天发现,这个包有两个问题: 一个是比较复杂(我是菜鸟,求别喷,我真的觉得他挺复杂的..).比如说你要想处理既有属性又有值的xml就比较麻烦.(@XStreamConverter注解这种方法报这个错:com.thoughtwor

java操作xml文档

目前最常用的XML解析技术是DOM和SAX. DOM是基于XML的树结构来完成解析的,适用于多次访问的XML文档,但是DOM解析比较消耗资源:而SAX是基于事件解析,适用于大数据量的XML文档,占用资源少,内存消耗小. DOM是文档对象模型(Document Object Model) 首先DOM会将XML文档映射成一颗倒挂的树,在这棵树中,每个节点都是以节点对象的形式存在的. 我们通过操作这些对象就可以完成XML文件的读写任务了. 我们可以直接根据节点的名称或属性查找该节点对象,也可以根据一个

java操作XML文件

XML文件可以用来作为一种小型数据库存在,但更多时候在项目中都是用来当成配置文件用的,也就避免不了对XML文件的增上改查操作. 在java中,解析XML文件的方式大致分为两种:DOM解析,SAX解析 先来说DOM解析方式:xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容. 用的较为多的是Dom4j工具(非官方)解析,简单介绍下Dom4j的使用,具体API文档请下载

Java操作XML文件 dom4j 篇

在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互.今天就来讲一下Java 中使用dom4j来操作XML文件. 我们需要引入的包: //文件包 import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileWriter; //工具包 import java.util.Iterator; import java.util.List; //dom4j包 import org.dom

Java demo之Java操作XML

Java是一门高级编程语言,自然少不了对各种文件进行操作的功能.现在笔者就来写一个操作XML的demo供大家参考和学习.首先要知道Java对XML操作的方式并非只有一种,那么究竟哪种方式更高效,哪种方式更适用或主流呢?Java主要有四种方式操作XML文件,下面我们就用代码下载来看一看,比较一下.     以下是Java创建XML文件的四种主流方式. Java代码    public class CreateTest { /** * DOM方式生成xml文档 */ private void DOM

Java操作xml

package jiexi; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; //JAXP DOM方式解析XML文档实例 public class JaxpCRUD { public static v

用java操作XML文件(DOM解析方式)

XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DOM解析方式 在java工程中导入dom4j.jar包. (一)用java读XML文件 <1>创建SAXReader对象. RAXReader reader=new RAXReader(); <2>调用RAXReader的Document read(File file)方法,获取xml文

XML —— Java 操作 XML 工具包( JDOM&amp;DOM4J )

1. JDOM 引入 JDOM 是一种使用 XML(标准通用标记语言下的一个子集) 的独特 Java 工具包,用于快速开发 XML 应用 程序. 集合DOM 和 SAX 的优点 需要引入jar包 JDOM 官方网站:http://www.jdom.org/ 小缺陷:生成文档不会格式化,需要手动格式化 ( ctrl+shift+F) import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.

java操作xml超简单的方法

用dom4j?SAX?no,no,no,光看api和帮助文档就烦,有没有更简单的方法呢?答案是有的. 那就是默默无名的:JAXB jaxb是啥? 摘抄一段度娘百科的介绍: JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类.JAXB允许JAVA人员将JAVA类映射为XML表示方式,常用的注解包括:@XmlRootElement,@X