1. 程式人生 > >java對xml檔案操作的工具類

java對xml檔案操作的工具類

首先列出目錄結構及其檔案內的功能:

com.testxml

          .main    //所有物件的入口,測試類
          .books   //實體
          .boos.xml   //xml檔案
          .booksDao      //將實體中的值轉化為xml檔案,儲存到制定目錄下的xml檔案中
                         //解析xml檔案轉化為list<實體>
          .testxml  //未整合的對xml檔案的操作
          .xmlUtil       //xml工具類,建立document物件
                         //得到父節點的子節點的值,只限於父節點下面的子節點是末端元素
                         //將document物件寫入到指定的xml檔案中去

                         //刪除指定節點及其子節點

xml工具類程式碼:

package com.testxml;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

public class xmlUtil {

	/**
	 * 建立document物件
	 * @param 相對路徑
	 * @return
	 * @throws Exception
	 */
	public  static Document getDocument(String str) throws Exception
	{
		//獲取dom解析器工廠
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		//獲取具體的解析器
		DocumentBuilder db = dbf.newDocumentBuilder();
		//解析xml檔案,獲取document物件
		Document document = db.parse(new File(str));
		return document;
	}
	
	/**
	 * 得到父節點的子節點的值,只限於父節點下面的子節點是末端元素
	 * @param document   xml物件
	 * @param parentSrt  父元素
	 * @param childStr   子元素
	 * @param i   第幾個父元素,從0開始
	 * @return
	 */
	public  static String getChildValue(Document document,String parentSrt,String childStr,int i)
	{
		NodeList list = document.getElementsByTagName(parentSrt);
	    Element element = (Element) list.item(i);
	    if(element==null)
	    {
	    	throw new NullPointerException("指定的父節點不存在");
	    }
	    String content = element.getElementsByTagName(childStr).item(0).getFirstChild().getNodeValue();
		return content;
	}
	
	/**
	 * 將document物件寫入到指定的xml檔案中去
	 * @param document
	 * @param str  xml所在目錄
	 * @throws Exception
	 */
	 public  static void saveDocument(Document document,String str) throws Exception
	 {
	    TransformerFactory transformerFactory = TransformerFactory.newInstance();  
        //step10:獲得一個Transformer物件  
        Transformer transformer = transformerFactory.newTransformer();  
        //step11:把document物件用一個DOMSource物件包裝起來  
        Source xmlSource = new DOMSource(document);  
        //step12:建立一個儲存目標物件  
        Result outputTarget = new StreamResult(new File(str));  
        //step13:生成相應的xml檔案  
        transformer.setOutputProperty("encoding", "UTF-8");
        transformer.transform(xmlSource, outputTarget);  
	 }
	
	 /**
	  * 刪除指定節點及其子節點
	  * @param name  節點鍵
	  * @param str   xml檔案所在目錄
	  * @return
	  * @throws Exception
	  */
	 public  static boolean delete(Document document,String name,String str) throws Exception
	 {
		 boolean result = false; 
		 NodeList nodeLists = document.getElementsByTagName(name); 
		 int len=nodeLists.getLength();
		 //遍歷這個nodelist,每次都刪除nodelist的第一個,因為nodelist的size是不斷變化的
		 for(int i=0;i<len;i++)
		 { 
			 nodeLists.item(0).getParentNode().removeChild(nodeLists.item(0)); 
		 }
		 xmlUtil.saveDocument(document, str);
		 result=true;
		 return result;
	 }
	 
	public static void main(String[] args) throws Exception {
		Document document=xmlUtil.getDocument("./src/testxml/books.xml");
		String value=xmlUtil.getChildValue(document,"book","title",1);
		System.out.println(value);
	}

}
booksdao類程式碼:
package com.testxml;

import java.util.ArrayList;
import java.util.List;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class booksDao {

	private Document document;
	public booksDao(String str) throws Exception
	{
		if(document==null)
		{
			document = xmlUtil.getDocument(str);
		}
	}
	
	/**
	 * 將實體中的值轉化為xml檔案,儲存到制定目錄下的xml檔案中
	 * @param books  實體
	 * @param str  存放xml檔案的路徑
	 * @return  是否儲存成功
	 * @throws Exception
	 */
	 public boolean save(books books,String str) throws Exception
	 {  
		 if(books==null)
		 {
			 throw new IllegalArgumentException("實體類book不能為null");  
		 }
		 boolean result = false; 
		 
		 Element book = document.createElement("book"); 
		 //給獲取的book元素新增屬性
		 book.setAttribute("category", books.getCategory());  
		 //建立元素,新增到book上面
		 Element title = document.createElement("title");  
		 title.setTextContent(books.getTitle()); 
		 book.appendChild(title);
		 Element author = document.createElement("author");  
		 author.setTextContent(books.getAuthor());
		 book.appendChild(author);
		 
		 //獲取根節點,根節點新增book元素
		 Node tempNode=document.getElementsByTagName("booklist").item(0);
		 tempNode.appendChild(book);
		 
		 xmlUtil.saveDocument(document, str);
		 result=true;
		 return result;
	 }
	 
	 /**
	  * 刪除指定節點及其子節點
	  * @param name  節點鍵
	  * @param str   xml檔案所在目錄
	  * @return
	  * @throws Exception
	  */
	 public void delete(String name,String str) throws Exception
	 {
		 boolean result=xmlUtil.delete(document, name, str);
		 if(result==true)
		 {
			 System.out.println("刪除成功!");
		 }
	 }
	 
	 /**
	  * 解析xml檔案轉化為list<實體>
	  * @param name
	  * @return
	  */
	 public List<books> GetEntityList(String name)
	 {
		 List<books> booklists=new ArrayList<books>();
		 NodeList nodeLists = document.getElementsByTagName(name);
		 for(int i=0;i<nodeLists.getLength();i++)
		 {  
             Element e = (Element) nodeLists.item(i); 
             books books=new books();
             books.setCategory(e.getAttribute("category"));
             books.setTitle(e.getElementsByTagName("title").item(0).getTextContent());
             books.setAuthor(e.getElementsByTagName("author").item(0).getTextContent());
             booklists.add(books);
		 }  
		 return booklists;
	 }
	
}

books.xml檔案
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<booklist>
	<book category="這是分類1">
		<title>這是標題1</title>
		<author>這是作者1</author>
	</book>
	<book category="這是分類2">
		<title>這是標題2</title>
		<author>這是作者2</author>
	</book>
	<book category="這是分類3">
		<title>這是標題3</title>
		<author>這是作者3</author>
	</book>
	<book category="這是分類4">
		<title>這是標題4</title>
		<author>這是作者4</author>
	</book>
</booklist>
其他檔案程式碼略。