xml工具类

xml工具类

引入pom:

		<dependency>
			<groupId>dom4j</groupId>
			<artifactId>dom4j</artifactId>
			<version>1.6.1</version>
		</dependency>

接口

import java.util.List;
import java.util.Map;

import org.dom4j.Element;

public interface BaseXML {
	/**
	 * 创建一个带有一个属性的节点
	 * @param elementName 节点名称
	 * @param label  属性名称
	 * @param value	 属性值
	 * @return
	 */
	public Element createElement(String elementName,String label,String value);
	/**
	 * 创建一个带有一个属性且内容为context的节点
	 * @param elementName 节点名称
	 * @param label  属性名称
	 * @param value	 属性值
	 * @param context 文本内容
	 * @return
	 */
	public Element createElement(String elementName,String label,String value,String context);
	/**
	 * 创建一个带有一系列属性且内容为context的的节点
	 * @param elementName 节点名称
	 * @param attrs	所有属性
	 * @param context 文本内容
	 * @return
	 */
	public Element createElement(String elementName,Map<String, String> attrs, String context);
	/**
	 * 创建一个带有一系列属性的节点
	 * @param elementName 节点名称
	 * @param attrs	所有属性
	 * @return
	 */
	public Element createElement(String elementName,Map<String, String> attrs);
	/**
	 * 指定节点下增加一个节点
	 * @param target 指定节点
	 * @param element 增加的节点
	 * @return
	 */
	public void addElementInTarget(Element target,Element element);
	/**
	 * 指定节点下增加一个节点
	 * @param target 指定节点
	 * @param element 增加的节点
	 * @return
	 */
	public Element addElementInTarget(Element target,String elementName,Map<String, String> attrs,String context);
	/**
	 * 根节点下增加一个节点
	 * @param element 增加的节点
	 * @return
	 */
	public void addElement(Element element);
	/**
	 * root下增加一个节点
	 * @param elementName 节点名称
	 * @param attrs		   属性
	 * @param context   	 文本内容    
	 */

	public Element addElementByName(String elementName,Map<String, String> attrs, String context);
	/**
	 * root下增加一个节点
	 * @param elementName 节点名称
	 * @param attrs		   属性
	 */
	public Element addElementByName(String elementName,Map<String, String> attrs) ;
	/**
	 * 通过id属性查找指定节点
	 * @param id
	 * @return
	 */
	public Element findElementById(String id);
	/**
	 * 查找所有节点名称为elementName的节点
	 * @param elementName
	 * @return
	 */
	public List<Element> findElementByName(String elementName);
	/**
	 * 通过指定一系列属性查找指定节点
	 * @param attributes
	 * @return
	 */
	public Element findElementByArrributes(Map<String,String> attributes);
	/**
	 * 通过指定一系列属性查找所有节点
	 * @param attributes
	 * @return
	 */
	public List<Element> findAllElementByArrributes(Map<String,String> attributes);
	/**
	 * 加载指定节点的所有子节点
	 * @param element
	 * @return
	 */
	public List<Element> loadSubElement(Element element);
	/**
	 * 查找根节点
	 * @return
	 */
	public Element  loadRoot();
	/**
	 * 删除指定节点
	 * @param tar
	 * @return
	 */
	public boolean deleteElement(Element tar);
	/**
	 * 删除指定一系列节点
	 * @param tarlist
	 * @return
	 */
	public boolean deleteElement(List<Element> tarlist);
	/**
	 * 删除所有节点名称为elementName的节点
	 * @param elementName
	 * @return
	 */
	public boolean deleteElement(String elementName);
	/**
	 * 删除属性匹配所有attributes的节点
	 * @param elementName
	 * @return
	 */
	public boolean deleteElementByAttributes(Map<String,String> attributes);
	/**
	 * 修改制定节点的属性值,如果存在则覆盖,否则写入
	 * @param element
	 * @param attributes
	 * @return
	 */
	public void modifyElement(Element element,Map<String,String> attributes,String context);
	/**
	 * 写入文件
	 * @param filePath
	 */
	public void writeXml(String filePath);
	

}

实现类


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.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**
 * 操作XML文件的工具类
 * 
 * @author zbc
 */
public class XMLUtil implements BaseXML{
	
	private Document document;
//	private static final Text text = new DOMText("");
	private Element root;
	
	public static XMLUtil getInstance(String filepath){
		return new XMLUtil(filepath) ;
	}
	private XMLUtil(String path) {
		this.document = this.getDocument(path);
		this.root = document.getRootElement();
	}
	/**
	 * 得到XML文档
	 * @param xmlFile	文件名(路径)
	 */
	private Document getDocument(String xmlFile) {
		SAXReader reader = new SAXReader();
		reader.setEncoding("UTF-8");
		File file = new File(xmlFile);
		try {
			if (!file.exists()) {
				return null;
			} else {
				return reader.read(file);
			}
		} catch (DocumentException e) {
			e.printStackTrace();
			return null;
		}
	}



	/**
	 * root下增加一个节点
	 * @param elementName
	 *            
	 * @param attributeNames 要增加的元素名称
	 *            
	 * @param attributeValues 要增加的元素属性
	 * 
	 * @param context   	 文本内容    
	 */
	@Override
	public Element addElementByName(String elementName,Map<String, String> attrs, String context) {
		Element root,subElement;
		try {
			 root = document.getRootElement();
			 subElement = root.addElement(elementName);
			 
			for (Map.Entry<String, String> attr : attrs.entrySet()) {
				subElement.addAttribute(attr.getKey(), attr.getValue());
				
			}
			subElement.setText(context==null ? "" : context);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		return subElement;
	}
	
	public Element addElementByName(String elementName,
			Map<String, String> attrs) {
		// TODO Auto-generated method stub
		return this.addElementByName(elementName, attrs, null);
	}
	

	private Element loadElementByArrributes(Element element,Map<String,String> attributes) {
		 List<Attribute> list = element.attributes();
		 String key,val,tarVal;
		 int count = 0;
		 for(Attribute a : list){
			 key = a.getName();
			 val = a.getValue();
			 tarVal = attributes.get(key);
			 if(tarVal!=null &&tarVal.equals(val))
				 count ++; 
		 }
		 if(count == attributes.size()){
			 return element;
		 }
		 Element tar = null;
		 List<Element> childs = element.elements();
		 for(Element e : childs){
			 tar = this.loadElementByArrributes(e, attributes);
			 if(tar!=null)
				 return tar;
		 }
		 return null;
			
	}
	


	/**
	 * 输出xml文件
	 * 
	 * @param document
	 * @param filePath
	 * @throws IOException
	 */
	public void writeXml(String filePath) {
		File xmlFile = new File(filePath);
		XMLWriter writer = null;
		try {
			if (xmlFile.exists())
				xmlFile.delete();
			writer = new XMLWriter(new FileOutputStream(xmlFile),OutputFormat.createPrettyPrint());
			writer.write(document);
			writer.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (writer != null)
				try {
					writer.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		}
	}

	@Override
	public Element createElement(String elementName, String label, String value) {
		// TODO Auto-generated method stub
		
		return this.createElement(elementName, label, value, null);
	}

	@Override
	public Element createElement(String elementName, String label,
			String value, String context) {
		// TODO Auto-generated method stub
		Element result = DocumentHelper.createElement(elementName);
		Attribute attribute = DocumentHelper.createAttribute(result, label, value);
		result.add(attribute);
		result.setText(context==null ? "" : context);
		return result;
	}

	@Override
	public Element createElement(String elementName, Map<String, String> attrs) {
		// TODO Auto-generated method stub
		return this.createElement(elementName, attrs, null);
	}
	@Override
	public Element createElement(String elementName, Map<String, String> attrs,
			String context) {
		// TODO Auto-generated method stub
		Element result = DocumentHelper.createElement(elementName);
		attrs.forEach((K,V)->{
			result.add(DocumentHelper.createAttribute(result, K, V));
		});
		result.setText(context==null ? "" : context);
		return result;
	}
	@Override
	public void addElementInTarget(Element target, Element element) {
		// TODO Auto-generated method stub
		target.add(element); 
	}
	@Override
	public Element addElementInTarget(Element target, String elementName,
			Map<String, String> attrs, String context) {
		// TODO Auto-generated method stub
		Element e = this.createElement(elementName, attrs, context);
		this.addElementInTarget(target, e);
		return e;
	}
	@Override
	public void addElement(Element element) {
		// TODO Auto-generated method stub
		this.addElementInTarget(root.element("root"), element);
	}

	@Override
	public List<Element> findElementByName(String elementName) {
		// TODO Auto-generated method stub
		List<Element> records = new ArrayList();
		this.loadAllElementByName(document.getRootElement(), elementName, records);
		return records;
	}
	private void loadAllElementByName(Element element,String elementName,List<Element> records) {
		 String name = element.getName();
		 if(name.equals(elementName))
			 records.add(element);
		 List<Element> childs = element.elements();
		 for(Element e : childs)
			 this.loadAllElementByName(e, elementName, records);
	}
	/**
	 * 通过指定id查找节点
	 * @param id
	 * @return
	 */
	@Override
	public  Element findElementById(String id) {
		Map<String,String> attributes = new HashMap(4);
		attributes.put("id", id);
		List<Element> list = this.findAllElementByArrributes(attributes);
		return list.size()==0 ? null : list.get(0);
	}
	/**
	 * 通过指定属性查找节点
	 * @param attributes
	 * @return
	 */
	@Override
	public List<Element> findAllElementByArrributes(Map<String,String> attributes) {
		List<Element> records = new ArrayList();
		this.loadAllElementByArrributes(document.getRootElement(), attributes,records);
		return records;
	}
	@Override
	public Element findElementByArrributes(Map<String, String> attributes) {
		// TODO Auto-generated method stub
		return this.loadElementByArrributes(document.getRootElement(), attributes);
	}
	private void loadAllElementByArrributes(Element element,Map<String,String> attributes,List<Element> records) {
		 List<Attribute> list = element.attributes();
		 String key,val,tarVal;
		 int count = 0;
		 for(Attribute a : list){
			 key = a.getName();
			 val = a.getValue();
			 tarVal = attributes.get(key);
			 if(tarVal!=null &&tarVal.equals(val))
				 count ++; 
		 }
		 if(count == attributes.size()){
			 records.add(element);
			 return ;
		 }
		 List<Element> childs = element.elements();
		 for(Element e : childs)
			this.loadAllElementByArrributes(e, attributes,records);
	}
	@Override
	public boolean deleteElement(List<Element> tarlist) {
		// TODO Auto-generated method stub
		Element p;
		try {
			for(Element e : tarlist){
				p = e.getParent();
				if(p!=null)
					p.remove(e);
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			return false;
		}	
		return true;
	}
	@Override
	public boolean deleteElement(Element tar) {
		// TODO Auto-generated method stub
		Element p;
		try {
		p = tar.getParent();
		if(p!=null)
			p.remove(tar);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			return false;
		}
		return false;
	}
	@Override
	public boolean deleteElement(String elementName) {
		// TODO Auto-generated method stub
		List<Element> es = this.findElementByName(elementName);
		return this.deleteElement(es);
	}
	@Override
	public boolean deleteElementByAttributes(Map<String,String> attributes) {
		// TODO Auto-generated method stub
		List<Element> es = this.findAllElementByArrributes(attributes);
		return this.deleteElement(es);
	}
	@Override
	public void modifyElement(Element element, Map<String, String> attributes,String context) {
		// TODO Auto-generated method stub
		 List<Attribute> list = element.attributes();
		 String key,val,tarVal;
		 for(Attribute a : list){
			 key = a.getName();
			 if(attributes.containsKey(key))
				 element.remove(a);
		 }
		 for(Map.Entry<String, String> entry : attributes.entrySet())
			 element.add(DocumentHelper.createAttribute(element, entry.getKey(), entry.getValue()));
		 element.setText(context==null ? "" : context);
		 
	}
	@Override
	public List<Element> loadSubElement(Element element) {
		// TODO Auto-generated method stub
		List<Element> list = new ArrayList();
		this.loadSubElementHelper(element, list);
		return list;
	}
	private void loadSubElementHelper(Element element,List<Element> list) {
		// TODO Auto-generated method stub
		List<Element> all = element.elements();
		for(Element e : all){
			list.add(e);
			loadSubElementHelper(e, list);
		}
	}
	@Override
	public Element loadRoot() {
		// TODO Auto-generated method stub
		return this.root;
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值