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,385 Responses

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

  2. homepage表示:

    I love it when people come together and share views. Great website, stick with it!

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

  4. Wallacefex表示:

    denemebonusuverensiteler25: deneme bonusu veren yeni siteler – deneme bonusu veren siteler

  5. child abuse表示:

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

  6. DannyUnded表示:

    How Nigeria’s biggest city became the world’s hottest winter party destination
    casino bonus

    It’s a world of endless parties and sleepless nights. A relentless celebration that turns West Africa – and especially Nigeria’s largest city, Lagos – into one of the hottest destinations on the continent, if not the planet, right in the middle of winter.

    Detty December is a magical time between December and early January when diaspora communities and tourists flock to Ghana, Nigeria and South Africa for an unforgettable experience filled with flavourful food, soulful African music and sunshine.

    Beach parties, festivals and top-tier performances fuel the energy, while fashion takes center stage, with everyone dressing to impress.

    Nearly two-thirds of Nigeria’s population is under 25, according to the United Nations Population Fund, making this one of the world’s youngest countries.

    Internationally renowned Afrobeats performers and foreign artists make surprise appearances. DJs take to the streets, blasting powerful beats from consoles mounted atop bright yellow minibuses.

    At times it’s all-consuming. Good luck getting hair salon appointments, affordable air tickets or navigating Lagos’ already notorious traffic when the party crowds are in town.

    Detty December (“detty” is a playful corruption of “dirty”) is a triumphant celebration of culture, music and good vibes that has evolved in recent years during the traditional holidays influx of diaspora returnees, which heightened in 2018 when Ghana ran a launched a successful “Year of Return” campaign actively encouraging people to visit their ancestral homelands.

    It’s gathered pace over the past five years, gaining an international reputation, as IJGBs (“I Just Got Backs”) and their friends arrive in batches, eager to unwind and blow off steam after the fast-paced, hard-working year they’ve had overseas.

    For many in the vast Nigerian diaspora, it is a deeply personal homecoming, a chance to reconnect with their heritage, traditions and families while immersing themselves in the lively energy of Nigerian life.

  7. FrankEmine表示:

    Canl? Casino Siteleri: canl? casino siteleri – Canl? Casino Siteleri

  8. Wallacefex表示:

    sweet bonanza kazanma saatleri: sweet bonanza oyna – sweet bonanza slot

  9. JasonUnsoG表示:

    https://denemebonusuverensiteler25.com/# deneme bonusu veren siteler yeni

  10. JasonUnsoG表示:

    https://slotsiteleri25.com/# slot oyunlar?

  11. BradleyEdino表示:

    slot siteleri slot oyunlar? puf noktalar? az parayla cok kazandiran slot oyunlar?

  12. 20 Trailblazers Lead The Way In Replacement
    Car Key Cost cheap car keys replacement [istartw.lineageinc.Com]

  13. BradleyEdino表示:

    en guvenilir casino siteleri Deneme Bonusu Veren Siteler deneme bonusu veren casino siteleri

  14. JasonUnsoG表示:

    https://casinositeleri25.com/# guvenilir casino siteleri

  15. Wallacefex表示:

    deneme bonusu veren siteler: deneme bonusu veren yeni siteler – deneme bonusu veren yeni siteler

  16. FrankEmine表示:

    slot oyunlar? puf noktalar?: slot casino siteleri – slot siteleri

  17. A Step-By-Step Guide To Fridge Freezer Sale UK Best Fridge-Freezer (http://Www.Taksim.In)

  18. Nine Things That Your Parent Taught You About
    Accident Lawyer Near Me Accident Lawyer Near Me – https://Forsyth-Deleuran.Mdwrite.Net,

  19. Wallacefex表示:

    deneme bonusu veren casino siteleri: Casino Siteleri – Deneme Bonusu Veren Siteler

  20. FrankEmine表示:

    yeni deneme bonusu veren siteler: yat?r?ms?z deneme bonusu veren siteler – yeni deneme bonusu veren siteler

  21. BradleyEdino表示:

    Casino Siteleri Canl? Casino Siteleri Casino Siteleri

  22. Nearest Locksmith Tools To Improve Your Everyday Lifethe Only Nearest Locksmith
    Trick Every Person Should Be Able To nearest locksmith (Cameradb.Review)

  23. JasonUnsoG表示:

    https://denemebonusuverensiteler25.com/# deneme bonusu veren siteler yeni

  24. JasonUnsoG表示:

    https://casinositeleri25.com/# guvenilir casino siteleri

  25. DavidTouts表示:

    https://denemebonusuverensiteler25.com/# deneme bonusu veren yeni siteler

  26. BradleyEdino表示:

    canl? casino siteleri casino bahis siteleri deneme bonusu veren casino siteleri

  27. Wallacefex表示:

    sweet bonanza guncel: sweet bonanza kazanma saatleri – sweet bonanza slot

  28. Fewpal.com表示:

    Is Samsung Freezer As Crucial As Everyone Says? l g Refrigerator (Fewpal.com)

  29. BradleyEdino表示:

    slot siteleri slot oyunlar? puf noktalar? en cok kazand?ran slot oyunlar?

  30. DavidTouts表示:

    https://sweetbonanza25.com/# sweet bonanza slot

發佈留言

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