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

14,899 Responses

  1. BryanCar表示:

    Trusted by patients from all corners of the world.
    how does gabapentin 300mg work
    Their mobile app makes managing my medications so easy.

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

  3. Waynenam表示:

    Топ Лицензированных Онлайн-Казино на Деньги: Играй Безопасно и Выигрывай!

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

    Основные критерии для онлайн-казино с лицензией
    При выборе онлайн-казино мы учитываем следующие важные критерии:

    Наличие лицензии и надежная регуляция
    Безупречная репутация и позитивные отзывы игроков
    Обширный выбор игр от ведущих провайдеров
    Щедрые бонусы и регулярные акции для всех игроков
    Удобные и безопасные методы ввода и вывода средств
    Быстрые и гарантированные выплаты выигрышей
    Защита личных данных и безопасность аккаунта
    Круглосуточная и оперативная поддержка клиентов
    Удобные мобильные версии и приложения для игры в любом месте
    Интуитивно понятный и современный интерфейс сайта

    Рейтинг 15 лицензированных онлайн-казино
    https://telegra.ph/Cash-Rejting-03-20
    Выбирая любое из этих лицензированных онлайн-казино, вы гарантируете себе честную игру, безопасность и отличный игровой опыт. Наслаждайтесь надежными площадками и выигрывайте с уверенностью!

  4. JosephRar表示:

    Сыграйте РЅР° деньги, почувствуйте азарт!: balloon казино официальный сайт – balloon казино

  5. KennethIdiom表示:

    https://akhbutina.kz/# Баллон — это автомат для настоящих любителей.

  6. JosephRar表示:

    Игровой автомат Ballon дарит СЏСЂРєРёРµ эмоции.: balloon игра – balloon игра

  7. BryanCar表示:

    A universal solution for all pharmaceutical needs.
    are neurontin and gabapentin the same drug
    Their online chat support is super helpful.

  8. ScottWeemn表示:

    Кракен купить – Как зайти на кракен, Кракен даркнет

  9. ScottWeemn表示:

    кракен – Кракен тор, Kraken darknet market

  10. ScottWeemn表示:

    Новая гидра – Новая гидра, Даркнет вход

  11. hitclub表示:

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

  12. ScottWeemn表示:

    Кракен зеркало – Кракен ссылки, Новая гидра

  13. BryanCar表示:

    They understand the intricacies of international drug regulations.
    can you become addicted to gabapentin
    Some are medicines that help people when doctors prescribe.

  14. KennethIdiom表示:

    https://neokomsomol.kz/# Ballon — выберите свой путь к победе.

  15. Davidriday表示:

    balloon игра на деньги balloon казино Играйте Рё выигрывайте РЅР° автомате Ballon!

  16. BryanCar表示:

    Trust and reliability on a global scale.
    how can i get cheap cytotec without rx
    They have a great selection of wellness products.

  17. JosephRar表示:

    Игровые автоматы доступны всем желающим.: balloon казино – balloon игра

  18. ScottWeemn表示:

    Даркнет вход – Кракен регистрация, Кракен тор

  19. JosephRar表示:

    Попробуйте выиграть РЅР° автомате Ballon!: balloon казино играть – balloon казино

  20. ScottWeemn表示:

    Официальный сайт кракен – Даркнет маркет, Кракен купить

  21. Jessepooto表示:

    Казино — место для увлекательных РёРіСЂ.: balloon игра на деньги – balloon игра

  22. ScottWeemn表示:

    Кракен купить – Кракен регистрация, кракен

  23. ScottWeemn表示:

    Кракен регистрация – Как зайти на кракен, Даркнет маркет

  24. Jessepooto表示:

    Автомат Ballon предлагает уникальные Р±РѕРЅСѓСЃС‹.: balloon казино – balloon казино

  25. KennethIdiom表示:

    https://balloonigra.kz/# Ставь на деньги и выигрывай легко!

  26. MartyWrapy表示:

    Азартные РёРіСЂС‹ РїСЂРёРЅРѕСЃСЏС‚ радость Рё азарт.: balloon игра – balloon казино официальный сайт

  27. Charleslob表示:

    посмотреть в этом разделе nova маркетплейс

  28. EdwardMor表示:

    navigate to this web-site acheter des faux billets

發佈回覆給「JosephRar」的留言 取消回覆

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