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

  1. AndreDib表示:

    canadian pharmacy ltd https://canadianmdpharm.com/# best canadian pharmacy
    online pharmacy india

  2. 5 Clarifications Regarding Evolution Blackjack 에볼루션 무료 바카라

  3. Brandonnot表示:

    buying from online mexican pharmacy: purple pharmacy mexico price list – Mexican Easy Pharm

  4. Заголовок: Оцени Удачу: Запускай на Деньги Всети в Топовом Казино!

    Введение:

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

    Преимущества игры в онлайн казино:

    Играть онлайн – есть удобно: Пользователь могли бы приступить играть на бабки в любое удобное часики, не покидая теплого дивана. Теперь ни необходимо терять секунду на переезд и следовать серьезный дресс-код. Безграничный ассортимент забав: Винтернете казино поставляют обширный ассортимент игровых сессий на любой воображаемый желание – от стандартных автоматов до увлекательных игровых забав с реальными ведущими. Вы всегда найдете найдете что-то привлекательное для тебя. Пробовать на финансы – это волнение и шанс приза: Реальные вложения сделают игру ещё более волнующей. Опасность и адреналин – это такое делает заведение таким привлекательным. Вознаграждения и акции: Винтернете заведение удивляют верных гостей хорошими вознаграждениями за аккаунт, платежи и деятельность. Используйте их, чтобы увеличить ваши вероятности на победу. Сохранность и конфиденциальность: Инновационные онлайн игорный дом используют передовые техники защиты, чтобы сохранить ваши сведения и платежи. Пользователь в состоянии запускать на финансы, ни волнуясь о сохранности. Открытость 24/7: Казино онлайн трудится круглосуточно, следовательно пользователь можете играть в произвольное подходящее для тебя время.

    Как начать играть на деньги онлайн:

    Определите проверенное клуб: Рассмотрите мнения, оцените наличие разрешения и удостоверьтесь в надежности предпочтительного тобой сайта. Зарегистрируйтесь: Способ создания обычно происходит лишь немного времени. Тебе потребуется нужно будет записать свои данные и одобрить профиль. Внесите счет: Подберите подходящий путь внесения и зачислите первый вложение, чтобы запустить пробовать на деньги. Определите развлечение: Исследуйте доступные забавы и выберите те, которые тебе больше нравятся. Наслаждайтесь развлечением: Получайте радость от развлечения и не учитывайте об правильном понимании к увлекательным развлечениям.

    Почему стоит играть на деньги именно у нас?

    Наша компания поставляем:

    Очень обширный выбор развлечений от топовых разработчиков. Быстрые и простые пути пополнения и снятия капитала. Круглосуточную службу помощи, готовую помогать в любой проблеме. Хорошие вознаграждения и конкурсы для молодых и старых игроков. Новейшую технологию надежности и сохранность ваших данных.

  5. Jessie表示:

    7 Tips To Make The Most Of Your Sectional With Pull Out Bed couch sectional with
    pull out bed (Jessie)

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

  7. AndreDib表示:

    best canadian pharmacy online https://indiancertpharm.shop/# top 10 pharmacies in india
    cheapest online pharmacy india

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

  9. CurtisBam表示:

    canadian valley pharmacy: canadian neighbor pharmacy – canadian 24 hour pharmacy

  10. DavidAnemi表示:

    you could try this out solfare

  11. KennethTrike表示:

    browse around this web-site trump coins

  12. Brandonnot表示:

    drugs from canada: CanadianMdPharm – safe online pharmacies in canada

  13. DavidAnemi表示:

    Learn More Here solflare

  14. You Are Responsible For A SEO Consultancy London Budget? Twelve Top Ways
    To Spend Your Money Seo services london

  15. AndreDib表示:

    escrow pharmacy canada https://mexicaneasypharm.com/# Mexican Easy Pharm
    indian pharmacies safe

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

  17. Carrolleruck表示:

    https://indiancertpharm.com/# Online medicine
    canadian pharmacy online ship to usa

  18. CurtisBam表示:

    canada pharmacy online legit: CanadianMdPharm – best rated canadian pharmacy

發佈留言

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