java對xml檔案操作的工具類
阿新 • • 發佈:2019-02-16
首先列出目錄結構及其檔案內的功能:
com.testxml
.main //所有物件的入口,測試類.books //實體
.boos.xml //xml檔案
.booksDao //將實體中的值轉化為xml檔案,儲存到制定目錄下的xml檔案中
//解析xml檔案轉化為list<實體>
.testxml //未整合的對xml檔案的操作
.xmlUtil //xml工具類,建立document物件
//得到父節點的子節點的值,只限於父節點下面的子節點是末端元素
//將document物件寫入到指定的xml檔案中去
//刪除指定節點及其子節點
xml工具類程式碼:
booksdao類程式碼: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); } }
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>
其他檔案程式碼略。