简单封装的doc4j工具类方法的简单封装

开发使用的doc挺多的,以备以后的需要,将其封装了一下,以后直接拿来使用了。

jar下载:http://download.csdn.net/detail/xumajie88/6928377

代码如下:


import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringReader;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.jdom.xpath.XPath;
import org.xml.sax.InputSource;

/**
 * utility for read or wirte xml
 * @author xumajie
 * @version SourceTrace4.0 2014.2.17
 */
final public class SimpleXMLUtil {   
   private SimpleXMLUtil(){	   
   }

   /**
    * 将文件转为文档对象
    * @param xmlPath= 文件路径
    * @return 文档对象
    */
   public static Document file2Doc(String xmlPath){
       return file2Doc(xmlPath,false);       
   }
   
   public static void main(String[] args) {
//	   JarFile jar = null;
//	   try {
//			jar = new JarFile("D:\\workspace\\nmsi\\WebContent\\WEB-INF\\lib\\sourceview.jar");
//			Enumeration e = jar.entries();
//			while(e.hasMoreElements()){
//				JarEntry je = e.nextElement();
//				System.out.println(je.getName());
//			}
//	   	} catch (IOException e) {
//			e.printStackTrace();
//		}finally{
//			try {
//				if(jar!=null)
//					jar.close();
//			} catch (IOException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			}
//		}
//	   Document d = file2Doc("file:/D:/workspace/nmsi/WebContent/WEB-INF/lib/sourceview.jar!/com/shine/sourceview/host/config/pollers.xml");
//	   System.out.println(d);
	   Document d = file2Doc("E:\\project\\nms47\\src\\com\\shine\\project\\jyzfw\\config\\sysMenu.xml");
	   List es = d.getRootElement().getChildren("item");
	   for(Element e : es){
//		   System.out.println(e.getAttributeValue("id"));
		   if("5".equals(e.getAttributeValue("id"))){
			   System.out.println(e.getAttributeValue("text"));
			   //报表一级分类列表
			   List rs =e.getChildren();
			   for(Element re : rs){
				   System.out.println(re.getAttributeValue("id")+":"+re.getAttributeValue("text"));
				 //报表二级分类列表
				   List ss =re.getChildren();
				   for(Element se:ss){
					   System.out.println("\t"+se.getAttributeValue("text"));
				   }
			   }
		   }
	   }
//	   System.out.println(doc2String(d));
//	   System.out.println(BasePortTablePoller.class.getProtectionDomain().getCodeSource().getLocation().getPath());
   }
   
   private synchronized static InputStream readFromJar(JarFile jar,String path){
	   InputStream is = null;
	   int p = path.indexOf(".jar");
	   int s = 6;
	   if(!path.startsWith("file:"))
		   s = 0;
	   String jpath = path.substring(s,p)+".jar";
	   int s2 = 6;
	   if(!path.contains(".jar!"))
		   s2 = 5;
	   String fpath = path.substring(p+s2);
	   try{
		   jar = new JarFile(jpath);
		   Enumeration e = jar.entries();
			while(e.hasMoreElements()){
				JarEntry je = e.nextElement();
				if(je.getName().equals(fpath)){
					is = jar.getInputStream(je);
				}
			}
	   }catch(IOException e){
		   e.printStackTrace();
	   }
	   return is;
   }

   /**
    * 将文件转为文档对象
    * @param xmlPath= 文件路径
    * @param validate =是否校验个文件
    * @return 文档对象
    */
   public static Document file2Doc(String xmlPath,boolean validate){
	   SAXBuilder builder = new SAXBuilder(validate);
	   Document doc = null;
	   JarFile jar = null;
	   try{
		   xmlPath = xmlPath.replace("%20", " ");
		   if(xmlPath.contains(".jar")){
			   doc = builder.build(readFromJar(jar,xmlPath));
		   }else{
			   doc = builder.build(new File(xmlPath));		   
		   }
       }catch(Exception e){
    	   e.printStackTrace();
       }finally{
    	   try {
				if(jar!=null)
					jar.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
       }
       return doc;       
   }

   /**
    * 将文件流转为文档对象
    * @param stream =文件流
    * @param validate =是否校验个文件
    * @return 文档对象
    */
   public static Document file2Doc(InputStream stream,boolean validate){
	   SAXBuilder builder = new SAXBuilder(validate);
	   Document doc = null;
	   try{
		   doc = builder.build(stream);
       }catch(Exception e){
    	   e.printStackTrace();
       }
       return doc;       
   } 
   /**
    * 将文件流转为文档对象
    * @param stream= 文件流
    * @return 文档对象
    */
   public static Document file2Doc(InputStream stream){
	   SAXBuilder builder = new SAXBuilder(false);
	   Document doc = null;
	   try{
		   doc = builder.build(stream);
       }catch(Exception e){
    	   e.printStackTrace();
       }
       return doc;       
   } 

   /**
    * 将文档对象转换为字符串
    * @param doc= 文档对象
    * @return 文档字符串
    */
   public static String doc2String(final Document doc){
	   try {   
		   ByteArrayOutputStream baos = new ByteArrayOutputStream();   
           PrintWriter pw = new PrintWriter(baos);   
           Format format = Format.getCompactFormat();   
           format.setEncoding("UTF-8");   
           XMLOutputter xmlop = new XMLOutputter();   
           xmlop.setFormat(format);   
           xmlop.output(doc, pw);
           
           return baos.toString();
       } catch (Exception e) {      
           e.printStackTrace();   
       } 
       return null;
   }
   
   /**
    * 将文档对象中的某个元素转换为字符串
    * @param element= 文档对象中的某个元素
    * @return 元素字符串
    */
   public static String element2String(final Element element){
	   try {   
		   ByteArrayOutputStream baos = new ByteArrayOutputStream();   
           PrintWriter pw = new PrintWriter(baos);   
           Format format = Format.getCompactFormat();   
           format.setEncoding("UTF-8");   
           XMLOutputter xmlop = new XMLOutputter();   
           xmlop.setFormat(format);   
           xmlop.output(element, pw);
           return baos.toString();
       } catch (Exception e) {      
           e.printStackTrace();   
       } 
       return null;
   }
   /**
    * 将字符串转换为文档对象
    * @param xml= 需要转为文档对象的xml格式的字符串
    * @return 文档对象
    */
   public static Document string2Doc(final String xml){
	   Document doc = null;
	   try{
			StringReader sr = new StringReader(xml);
			InputSource is = new InputSource(sr);			
			doc = (new SAXBuilder()).build(is);
	   }catch(Exception e){
			e.printStackTrace();
	   }
	   return doc;
   }
   /**
    * 更新文档对象
    * @param xmlPath= 需要更新文件的路径
    * @param doc= 需要的文档对象
    */
   public static void updateXML(String xmlPath,Document doc){
	   try{		
		   xmlPath = xmlPath.replace("%20", " ");
		   Format format = Format.getCompactFormat();
		   format.setEncoding("UTF-8");
		   format.setIndent("	");
		   XMLOutputter serializer = new XMLOutputter(format);
		   FileOutputStream fos = new FileOutputStream(xmlPath);		  
		   serializer.output(doc, fos);
		   fos.close();
	   }catch(Exception e){
		   e.printStackTrace();
	   }      
   } 
   
   /**
    * 获取xml格式的字符串的元素
    * @param xmlPath= 需要更新文件的路径
    * @param xpathString= 需要查找的元素的节点路径 如:  "a/b"表示查找b元素
    * @return 查找的元素
    */
   public static List getElements(String xmlPath,String xpathString){
	   return getElements(file2Doc(xmlPath).getRootElement(),xpathString);
   }
   /**
    * 获取xml格式的字符串的元素
    * @param root= 查找文档对象的根节点
    * @param xpathString= 需要查找的元素的节点路径 如:  "a/b"表示查找b元素
    * @return 查找的元素
    */
   public static List getElements(Element root,String path){
	   try {
		   return XPath.selectNodes(root,path);
	   } catch (JDOMException e) {
		   e.printStackTrace();
	   }
	   return null;
   }
   /**
    * 获取文档对象的根节点指定节点路径元素
    * @param root= 查找文档对象的根节点
    * @param path= 需要查找的元素的节点路径 如:  "a/b"表示查找b元素
    * @return 查找的元素
    */
   public static Element getElement(Element root,String path){
	   try {
	   	   return (Element)XPath.selectSingleNode(root, path);
	   } catch (JDOMException e) {
		   e.printStackTrace();
	   }
	   return null;
   }
   /**
    * 删除节点
    * @param xml=xml文本
    * @param xpathString=xpath条件;
    * @return
    */
   public static Document removeNode(String xml,String xpathString){
	   return removeNode(string2Doc(xml),xpathString);
   } 
   /**
    * 删除节点
    * @param doc=xml文档对象
    * @param xpathString=xpath条件;
    * @return
    */
   public static Document removeNode(Document doc,String xpathString){
	   Element anode=null;
		try {
			XPath   xpath=XPath.newInstance(xpathString); 
			anode = (Element)xpath.selectSingleNode(doc);
		} catch (JDOMException e) {
			e.printStackTrace();
		} 
		anode.getParentElement().removeContent(anode); 
		return doc;
   }
   /**
    * 判断节点是否存在
    * @param xmlPath=xpath条件;
    * @return 
    */
   public static boolean isXMLExists(String xmlPath) {
		File file = new File(xmlPath);
		return file.exists();
	}
   /**
    * 把xml的所有子节点转化为Map
    * @param path=文档对象的路径
    * @param xpathString=需要转换的节点位置
    * @return map
    * */
	public static Map getChildrenMap(String path,String xpathString){
		Document doc=file2Doc(path);
		List list=getElement(doc.getRootElement(),xpathString).getChildren();
		Map map=null;
		if(null==list||0==list.size())
			return map;
		map=new HashMap();
		for (Element element:list) {
			map.put(element.getName(), element.getText());
		}
		return map;
	}
}


你可能感兴趣的:(java)