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

9,150 Responses

  1. KennethPah表示:

    prednisone uk buy buying prednisone prednisone for sale without a prescription

  2. MiguelUnind表示:

    http://amoxstar.com/# how much is amoxicillin prescription

  3. KennethPah表示:

    can you get clomid online clomidonpharm can i get generic clomid prices

  4. SamuelBix表示:

    ciprofloxacin generic: CiPharmDelivery – buy cipro online without prescription

  5. DanielAbice表示:

    https://prednibest.com/# steroids prednisone for sale

  6. MiguelUnind表示:

    https://amoxstar.com/# buying amoxicillin in mexico

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

  8. RobertJar表示:

    purchase cipro: buy cipro without rx – buy cipro without rx

  9. MiguelUnind表示:

    https://cipharmdelivery.com/# buy cipro online without prescription

  10. 789club表示:

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

  11. RobertJar表示:

    amoxicillin medicine: Amox Star – buy amoxicillin canada

  12. DanielAbice表示:

    http://amoxstar.com/# amoxicillin discount

  13. DanielAbice表示:

    https://clomidonpharm.com/# can i get generic clomid pills

  14. KennethPah表示:

    prednisone 20 tablet prednisone 10 mg canada 10 mg prednisone

  15. DanielAbice表示:

    http://amoxstar.com/# amoxicillin 500 mg without prescription

  16. RobertJar表示:

    ciprofloxacin order online: purchase cipro – where to buy cipro online

  17. RobertJar表示:

    clomid prices: clomid on pharm – how to buy cheap clomid no prescription

  18. KennethPah表示:

    how can i get clomid prices clomid on pharm can you buy clomid without dr prescription

  19. DanielAbice表示:

    https://clomidonpharm.com/# where to get generic clomid online

  20. DanielAbice表示:

    https://clomidonpharm.com/# can i purchase clomid without rx

  21. MiguelUnind表示:

    https://cipharmdelivery.com/# buy ciprofloxacin over the counter

  22. KennethBem表示:

    Collage Master is definitely the fastest-growing on-line store for personalized gifts, offering unique and even customizable options intended for every occasion. No matter if you’re celebrating some sort of birthday, anniversary, or perhaps special event, we provide the perfect special canvas for your reminiscences. Our diverse choice of materials and even sizes helps to ensure that you can find the ideal collage to suit your wants.

    Customers sing high prise of each of our user-friendly platform, which in turn allows them to upload photos and effortlessly customize their particular designs. With equipment to modify colors, layouts, and image placement, building a meaningful surprise has never been easier.

    https://www.bignetindia.com/city-guide/address/collage-master

    At Collage Master, all of us prioritize simplicity and quality, making it seamless for everyone in order to craft an ardent and one-of-a-kind surprise. Explore our selection today make your own order to produce a memorable experience for your loved ones.

  23. DanielAbice表示:

    https://cipharmdelivery.com/# cipro ciprofloxacin

  24. KennethPah表示:

    buy amoxicillin 500mg online AmoxStar buy amoxicillin 500mg canada

  25. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт телефонов vivo сервис, можете посмотреть на сайте: ремонт телефонов vivo цены
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  26. KennethPah表示:

    generic prednisone online prednisone 50 mg coupon prednisone price south africa

  27. MiguelUnind表示:

    https://cipharmdelivery.com/# ciprofloxacin 500mg buy online

  28. Ernestzow表示:

    natural ed cures: Best Canadian pharmacy – buy cheap prescription drugs online

  29. Jeffreyvop表示:

    reputable mexican pharmacies online: mexican pharmacy – mexican online pharmacies prescription drugs

  30. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт телефонов xiaomi, можете посмотреть на сайте: ремонт телефонов xiaomi рядом
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

發佈留言

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