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

7,827 Responses

  1. Сервисный центр предлагает качественный ремонт моноколес weerda ремонт моноколеса weerda адреса

  2. Профессиональный сервисный центр по ремонту бытовой техники с выездом на дом.
    Мы предлагаем:сервис центры бытовой техники ростов на дону
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  3. MichaelToP表示:

    farmacia online senza ricetta Farmacia online piu conveniente farmaci senza ricetta elenco

  4. Hello there! This article could not be written much better! Looking at this post reminds me of my previous roommate! He always kept preaching about this. I’ll send this information to him. Pretty sure he will have a very good read. Many thanks for sharing!

  5. I have been checking out many of your stories and it’s pretty nice stuff. I will make sure to bookmark your site

  6. сервисный центре предлагает ремонт телевизоров москва – ремонт плазменного телевизора цена

  7. Why Incorporating A Word Or Phrase Into Your
    Life Will Make All The Different 안전놀이터

  8. Edgarappow表示:

    farmacia online piГ№ conveniente: Farmacia online piu conveniente – acquisto farmaci con ricetta

  9. На сайте digi-keys.ru вы найдете широкий выбор проверенного программного обеспечения от Майкрософт, включая операционные системы Windows и пакеты Office. Мы поставляем доступные решения для тех, кто хочет найти надежное и лицензионное ПО для использования или домашнего применения. На странице представлены версии как для профессионалов, так и для обычных пользователей, например, Windows 10 Pro и Office 2021 Pro Plus, с информативными инструкциями по инсталляции и запуску.

    Если вам нужно windows 11 скачать с официального сайта то у нас вы сможете получить лицензионную копию напрямую с источника. Кроме того, вы найдете пошаговые указания по настройке системы на свое устройство. Благодаря легкодоступным лицензиям и системным обновлениям, ваши устройства будут работать без сбоев и защищенно.

    Мы предлагаем качественные решения для тех, кто искал надежное программное обеспечение, с простым процессом активации. Посетите digi-keys.ru, чтобы просмотреть все доступные варианты продуктов и найти подходящую версию Windows или Office, которая позволит вам продуктивную работу.

  10. PatrickLef表示:

    viagra ordine telefonico: viagra online siti sicuri – viagra subito

  11. Если вы искали где отремонтировать сломаную технику, обратите внимание – ремонт цифровой техники воронеж

  12. Ramiro表示:

    5 Killer Quora Answers To L Shape Leather Sofa sofa l shape cheap [Ramiro]

  13. Richardral表示:

    dove acquistare viagra in modo sicuro viagra senza ricetta viagra originale in 24 ore contrassegno

  14. MichaelToP表示:

    acquistare farmaci senza ricetta Cialis generico prezzo farmaci senza ricetta elenco

  15. Kennethtub表示:

    http://farmaciait.men/# farmacia online piГ№ conveniente
    acquisto farmaci con ricetta

  16. PatrickLef表示:

    comprare farmaci online con ricetta: Brufen 600 prezzo con ricetta – Farmacie on line spedizione gratuita

  17. MichaelToP表示:

    comprare farmaci online all’estero Farmacia online migliore comprare farmaci online all’estero

  18. Amelie表示:

    20 Best Tweets Of All Time About Private ADHD Assessment London private adhd assessment cornwall (Amelie)

  19. Ipads表示:

    May I simply just say what a comfort to discover someone who really knows what they’re discussing over the internet. You definitely realize how to bring an issue to light and make it important. A lot more people really need to look at this and understand this side of your story. I was surprised you are not more popular because you most certainly possess the gift.

  20. Uwruqy表示:

    buy artane without a prescription – purchase trihexyphenidyl pill where can i buy diclofenac gel

  21. Сервисный центр предлагает ремонт индукционной плиты ginzzu центр ремонта индукционной плиты ginzzu

  22. How Double Glazed Window Repair Influenced My Life For The Better Window repairs Near me

  23. Edgarappow表示:

    farmacia online: Cialis generico recensioni – Farmacie on line spedizione gratuita

  24. PatrickLef表示:

    farmacia online piГ№ conveniente: Farmacia online migliore – acquisto farmaci con ricetta

  25. Why Glass Repairing Can Be More Dangerous Than You Believed glass and Window
    Repairs [http://www.diggerslist.com]

  26. Nissan Juke Spare Key 101: It’s The Complete Guide For Beginners
    replacement nissan car Key; http://www.aiwadata.com,

  27. Richardral表示:

    viagra online spedizione gratuita viagra farmacia viagra 50 mg prezzo in farmacia

  28. 25 Surprising Facts About Chest Freezer Near Me lg fridge freezer Black (https://jscentstudio.com)

  29. MichaelToP表示:

    viagra cosa serve viagra online siti sicuri siti sicuri per comprare viagra online

發佈留言

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