Java針對XML檔案的操作大集合

XML是工作上常用到的資料交換格式,會需要利用JAVA進行XML資料的新增、修改或刪除,這裡把相關的方法記錄下來。

下述範例會存取在C:\Projects\Javas\中的sample.xml檔,而檔案中已經有以下的內容:

<?xml version="1.0" encoding="utf-8"?>

<root> 
  <item> 
    <productID>10001</productID>  
    <productName>產品名稱1</productName>  
    <productPrice>10</productPrice> 
  </item>
  <item> 
    <productID>10002</productID>  
    <productName>產品名稱2</productName>  
    <productPrice>20</productPrice> 
  </item>  
  <item> 
    <productID>10003</productID>  
    <productName>產品名稱3</productName>  
    <productPrice>30</productPrice> 
  </item>
</root>

利用Java存取XML我選用的Library是dom4j,可參考官網的介紹,以下是JAVA存取的程式範例:

package CDIT.stanley;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;

import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;


public class dom4jXMLFullSample {
	
	//新增XML Node內容
	public static String XMLAppendNode(String xmlFilePath, String productID, String productName, String productPrice){
		
		String appendStatus = "0";
		
		try {
			
			SAXReader reader = new SAXReader();
			Document document = reader.read(xmlFilePath);
			Element root = document.getRootElement();
			Element item = root.addElement("item");
			
			item.addElement("productID").setText(productID);
			item.addElement("productName").setText(productName);
			item.addElement("productPrice").setText(productPrice);
			
			OutputFormat format = OutputFormat.createPrettyPrint();
		    format.setEncoding("utf-8");
		    XMLWriter writer = new XMLWriter(new FileOutputStream(xmlFilePath),format);
		    writer.write(document);
		    writer.close();
		    appendStatus = "1";
			
		} catch (DocumentException e) {
			return appendStatus;
		} catch (UnsupportedEncodingException e) {
			return appendStatus;
		} catch (FileNotFoundException e) {
			return appendStatus;
		} catch (IOException e) {
			return appendStatus;
		}
		return appendStatus;
			
	}
	
	//修改XML Node內容
	public static String XMLChangeNodeValue(String xmlFilePath, String productID, String productName, String productPrice){
		
		String updateStatus = "0";
		
		try {
			SAXReader reader = new SAXReader();
			Document document = reader.read(xmlFilePath);
			Element root = document.getRootElement();
			@SuppressWarnings("rawtypes")
			Iterator it = root.elementIterator();
	        
			while (it.hasNext()) {
	            Element element = (Element) it.next();	            
	            if(productID.equals(element.elementText("productID"))){	            	
	    		    try {
	    		    	
		            	element.element("productName").setText(productName);
		            	element.element("productPrice").setText(productPrice);
		            	
		            	OutputFormat format = OutputFormat.createPrettyPrint();
		    		    format.setEncoding("utf-8");
		    		    XMLWriter writer = new XMLWriter(new FileOutputStream(xmlFilePath),format);
						writer.write(document);
						writer.close();
						updateStatus = "1";
					} catch (IOException e) {
						return updateStatus;
					}	    		   
				}
	        }
			return updateStatus;
		} catch (DocumentException e) {
			return updateStatus;
		}

	}
	
	//刪除XML Node
	public static String XMLRemoveNode(String xmlFilePath , String productID){
		String removeStatus = "0";
		
		try {
			SAXReader reader = new SAXReader();
			Document document = reader.read(xmlFilePath);
			Element root = document.getRootElement();
			@SuppressWarnings("rawtypes")
			Iterator it = root.elementIterator();
	        
			while (it.hasNext()) {
	            Element element = (Element) it.next();
	            if(productID.equals(element.elementText("productID"))){  	
	    		    try {
		            	element.element("item");
		            	element.detach();
		            	
		            	OutputFormat format = OutputFormat.createPrettyPrint();
		    		    format.setEncoding("utf-8");
		    		    XMLWriter writer = new XMLWriter(new FileOutputStream(xmlFilePath),format);
						writer.write(document);
						writer.close();
						removeStatus = "1";
					} catch (IOException e) {
						return removeStatus;
					}
				}	            
	        }
			return removeStatus;
		} catch (DocumentException e) {
			return removeStatus;
		}

	}
	
	public static void main (String[] args){
		String xmlFilePath = "C:\\Projects\\Javas\\sample.xml";
		//新增
		XMLAppendNode(xmlFilePath , "10004", "產品名稱4", "40");
		//修改
		XMLChangeNodeValue (xmlFilePath , "10001", "測試修改", "100");
		//刪除
		XMLRemoveNode (xmlFilePath , "10002");
	}
}

上述程式進行完後,會將原本的XML檔變成如下的內容:

<?xml version="1.0" encoding="utf-8"?>

<root> 
  <item> 
    <productID>10001</productID>  
    <productName>測試修改</productName>  
    <productPrice>100</productPrice> 
  </item>  
  <item> 
    <productID>10003</productID>  
    <productName>產品名稱3</productName>  
    <productPrice>30</productPrice> 
  </item>  
  <item> 
    <productID>10004</productID>  
    <productName>產品名稱4</productName>  
    <productPrice>40</productPrice> 
  </item> 
</root>

You may also like...

10,467 Responses

  1. chơi đĩ表示:

    Introducing to you the most prestigious online entertainment address today. Visit now to experience now!

  2. LarryHom表示:

    https://indianpharmacy.win/# india pharmacy

  3. Brianchoky表示:

    http://indianpharmacy.win/# india pharmacy mail order

  4. Guide To Lovense Mens Toys: The Intermediate Guide For Lovense Mens
    Toys Lovense Mens Toys

  5. Jamesknowl表示:

    https://indianpharmacy.win/# best online pharmacy india

  6. Brianchoky表示:

    http://mexicanpharmacy.store/# best online pharmacies in mexico

  7. ClaytonGauct表示:

    onlinecanadianpharmacy 24: best canadian online pharmacy – pharmacy wholesalers canada

  8. Jamestus表示:

    online shopping pharmacy india online pharmacy india indian pharmacy

  9. Brianchoky表示:

    https://mexicanpharmacy.store/# mexico drug stores pharmacies

  10. Jamesknowl表示:

    https://canadianpharmacy.win/# best mail order pharmacy canada

  11. ClaytonGauct表示:

    mexican rx online: mexican online pharmacies prescription drugs – buying prescription drugs in mexico online

  12. The Reason Why Adding A Fiat 500 Key Replacement Cost To Your Life Can Make All The An Impact fiat 500 Key fob reset (cameradb.review)

  13. Vehicle表示:

    20 Things You Need To Know About Kia Sportage Replacement Key Vehicle

  14. LarryHom表示:

    http://indianpharmacy.win/# Online medicine order

  15. LarryHom表示:

    https://indianpharmacy.win/# buy prescription drugs from india

  16. ClaytonGauct表示:

    best online pharmacy india: best india pharmacy – pharmacy website india

  17. Jamestus表示:

    canadian online pharmacy best online canadian pharmacy canadian pharmacy world reviews

  18. Brianchoky表示:

    https://indianpharmacy.win/# pharmacy website india

  19. You’ll Never Guess This Back Injury Lawyers’s Tricks Injury Lawyers

  20. LarryHom表示:

    http://mexicanpharmacy.store/# mexican rx online

  21. Brianchoky表示:

    http://canadianpharmacy.win/# canadapharmacyonline com

  22. 11 Ways To Completely Revamp Your Hire Car Accident Attorneys
    Car Injury Lawyers Near Me

  23. See What Signs And Symptoms Of ADHD In Women Tricks The
    Celebs Are Using signs and symptoms of Adhd in Women

  24. Jamestus表示:

    mexican border pharmacies shipping to usa buying from online mexican pharmacy medication from mexico pharmacy

  25. Jamesknowl表示:

    http://mexicanpharmacy.store/# purple pharmacy mexico price list

  26. Guide To Lovense Max 2 Cleaning: The Intermediate Guide For Lovense Max 2 Cleaning Lovense Max 2 Cleaning

  27. pg88表示:

    Thank for share! Play at https://kccommand.com to win

  28. ClaytonGauct表示:

    canadian pharmacy com: best online canadian pharmacy – canadian family pharmacy

  29. Brianchoky表示:

    https://canadianpharmacy.win/# medication canadian pharmacy

  30. What To Do To Determine If You’re Prepared For Composite Door Hinges Repair Door Frame Hinge Side

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。