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...

15,826 Responses

  1. WalterCherm表示:

    Their home delivery service is top-notch.
    https://gabapentinpharm24.top/
    From greeting to checkout, always a pleasant experience.

  2. Victorprima表示:

    Their international supply chain ensures no medication shortages.
    cost cytotec
    Appreciate their commitment to maintaining global healthcare standards.

  3. 15 Gifts For The Treadmill Home Gym Lover In Your Life treadmill At home

  4. This Week’s Most Popular Stories About Britta Yorkshire
    Terrier Puppies For Sale Britta Yorkshire Terrier Puppies For Sale Axel terrier welpen Kaufen​

  5. Victorprima表示:

    They keep a broad spectrum of rare medications.
    can i buy generic cytotec without insurance
    A stalwart in international pharmacy services.

  6. See What Leather Couch And Loveseat Set Tricks The Celebs Are Using Leather couch and loveseat set

  7. Your Family Will Thank You For Having This Buy Category B1 Driving License comprar carta de condução categoria B

  8. WalterCherm表示:

    Always a seamless experience, whether ordering domestically or internationally.
    https://cytotecpharm24.top/
    Their worldwide reputation is well-deserved.

  9. Jasonzitte表示:

    They’re globally connected, ensuring the best patient care.
    buying cipro without dr prescription
    A pharmacy I wholeheartedly recommend to others.

  10. y2mate表示:

    Hello, I believe your blog could be having browser compatibility problems. When I look at your blog in Safari, it looks fine however, when opening in Internet Explorer, it’s got some overlapping issues. I just wanted to provide you with a quick heads up! Besides that, great site!

  11. Jasonzitte表示:

    Always leaving this place satisfied.
    can i get generic clomid pill
    Their international shipment tracking system is top-notch.

  12. WalterCherm表示:

    Quick, accurate, and dependable.
    https://lisinoprilpharm24.top/
    The one-stop solution for all international medication requirements.

  13. Victorprima表示:

    Clean, well-organized, and easy to navigate.
    how to get generic lisinopril tablets
    The best in town, without a doubt.

  14. Victorprima表示:

    Medicament prescribing information.
    can you buy generic clomid price
    They provide a global perspective on local health issues.

  15. Jasonzitte表示:

    Their worldwide pharmacists’ consultations are invaluable.
    where to buy cheap cipro without dr prescription
    Their international partnerships enhance patient care.

  16. 15 Secretly Funny People Working In Buy Category A Driving License comprar carta De condução categoria b

  17. WalterCherm表示:

    I’ve sourced rare medications thanks to their global network.
    https://cytotecpharm24.top/
    The best in town, without a doubt.

  18. 20 Rising Stars To Watch In The ADHD Diagnoses Industry adhd diagnosis Timeline

  19. 10 Facts About Blondie Scarlet Macaw Bird That Can Instantly Put You In A Good
    Mood can Macaws be pets

  20. Jasonzitte表示:

    Their home delivery service is top-notch.
    gabapentin 400 mg
    Always ahead of the curve with global healthcare trends.

  21. WalterCherm表示:

    Stellar service in every department.
    https://lisinoprilpharm24.top/
    Their wellness workshops have been super beneficial.

  22. Victorprima表示:

    Cautions.
    how to get generic lisinopril without prescription
    What side effects can this medication cause?

  23. Victorprima表示:

    I appreciate their late hours for those unexpected needs.
    where can i buy clomid without a prescription
    Long-Term Effects.

  24. The Most Important Reasons That People Succeed In The Best 2 In 1 Pram Industry 2 in 1 pram stroller

  25. Jasonzitte表示:

    Get information now.
    can i buy clomid pill
    A true champion for patients around the world.

  26. WalterCherm表示:

    Their international health advisories are invaluable.
    https://gabapentinpharm24.top/
    Been a loyal customer for years and they’ve never let me down.

  27. Jasonzitte表示:

    A pharmacy that truly values its patrons.
    order generic clomid
    The staff provides excellent advice on over-the-counter choices.

  28. Victorprima表示:

    Always on the pulse of international healthcare developments.
    gabapentin apotek
    Stellar service in every department.

  29. WalterCherm表示:

    Everything information about medication.
    https://gabapentinpharm24.top/
    I’m always informed about potential medication interactions.

發佈回覆給「Axel terrier welpen Kaufen​」的留言 取消回覆

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