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

6,227 Responses

  1. ounce of weed表示:

    Good write-up. I definitely appreciate this site. Keep it up!

  2. sitemap表示:

    These are trul impressive iddeas in concerning blogging.
    Youu have tuched some pleasant thungs here. Any waay keep up wrinting.

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

  4. Lazrdfe表示:

    Привет, друзья!
    Мы предлагаем дипломы любой профессии по приятным тарифам.
    miac-omsk.ru/links/48785475?PAGEN_1=2

  5. Many thanks for bothering to line all of this out for people. This particular posting was in fact very useful in my opinion.

  6. How To Accummulate Women At Bars – It’s Not What Believe!
    남구오피 (http://www.beamng.com)

  7. KevinSounc表示:

    https://slotsiteleri.bid/# en iyi slot siteleri

  8. KevinSounc表示:

    https://sweetbonanza.network/# pragmatic play sweet bonanza

  9. An impressive share, I just now given this onto a colleague who had previously been doing a small analysis for this. Anf the husband the truth is bought me breakfast because I came across it for him.. smile. So allow me to reword that: Thnx for your treat! But yeah Thnkx for spending time to discuss this, Personally i think strongly concerning this and enjoy reading more on this topic. If you can, as you become expertise, would you mind updating your blog site with additional details? It’s extremely of great help for me. Big thumb up just for this post!

  10. thank for sharing this with all of us. Of course, what a great site and informationrmative posts, I will bookmark this site. keep doing your great job and always gain my support. cheers for sharing this beautiful story

  11. After looking over a few of the articles on your site, I truly appreciate your technique of blogging. I saved it to my bookmark site list and will be checking back in the near future. Please visit my website as well and tell me your opinion.

  12. Sazrori表示:

    Быстрая схема покупки диплома старого образца: что важно знать?

    smecenter.utcc.ac.th/index.php?option=com_k2&view=itemlist&task=user&id=390129

  13. Cazrdft表示:

    Привет, друзья!
    Заказать диплом о высшем образовании
    купить диплом в новокуйбышевске

  14. home page表示:

    I really like it when folks come together and share ideas. Great website, continue the good work.

  15. Darrelherse表示:

    en iyi slot siteler: en iyi slot siteleri – slot siteleri

  16. This website online can be a stroll-by means of for all the data you needed about this and didn’t know who to ask. Glimpse here, and you’ll undoubtedly uncover it.

  17. Sazrezj表示:

    Добрый день!
    Заказать документ университета
    english-lessons-online.ru/chitalka/topics/sport

  18. Darrelherse表示:

    guvenilir slot siteleri: en iyi slot siteleri 2024 – slot oyun siteleri

  19. I simply wanted to make a quick note to express gratitude to you for all of the unique information you are showing on this site. My prolonged internet look up has at the end of the day been paid with extremely good know-how to write about with my friends. I ‘d believe that we visitors are very much fortunate to live in a wonderful website with many brilliant individuals with helpful suggestions. I feel quite privileged to have discovered the web page and look forward to tons of more fabulous times reading here. Thank you again for a lot of things. click my site here – alternative medicine institute kolkata

  20. Oh my goodness! an incredible article dude. Thank you Nevertheless I’m experiencing situation with ur rss . Don’t know why Unable to subscribe to it. Is there anyone getting an identical rss problem? Anybody who is aware of kindly respond. Thnkx

  21. Uazrgzs表示:

    Здравствуйте!
    Заказать диплом о высшем образовании.
    telegra.ph/kupit-diplom-mami-08-13-9

  22. Backpage表示:

    I love it whenever people come together and share opinions. Great blog, keep it up.

發佈留言

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