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

  1. Bandar Online Togel Tools To Ease Your Daily Life Bandar Online Togel Trick That Should Be Used By Everyone Know bandar online togel

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

  3. Drstobeese表示:

    certified pharmacy online viagra: online pharmacy scams – us pharmacy cialis

  4. Hey! I know this is kind of off topic but I was wondering if you knew where I could find a captcha plugin for my comment form? I’m using the same blog platform as yours and I’m having problems finding one? Thanks a lot!

  5. This may be the right blog for everyone who is really wants to find out about this topic. You already know a great deal of its practically not easy to argue on hand (not too When i would want…HaHa). You definitely put a brand new spin on a topic thats been discussed for many years. Wonderful stuff, just great!

  6. 오피表示:

    Thanks for shedding light on this important matter.오피

  7. Sazryad表示:

    Как быстро и легально купить аттестат 11 класса в Москве

    usa.life/read-blog/66742

  8. Lazrwkz表示:

    Добрый день!
    Мы изготавливаем дипломы любой профессии по разумным ценам.
    umorforme.ru/obrazovanie-dlya-karernogo-rosta

  9. Eanrzrd表示:

    Добрый день!
    Мы готовы предложить дипломы любой профессии по выгодным ценам.
    rolandus.org/forum/profile.php?mode=viewprofile&u=25280

  10. Cazrisp表示:

    Официальная покупка диплома вуза с сокращенной программой обучения в Москве

    primacad.ru/images/pgs/?gde_kupit_podlinnuy_diplom_vuza_bezopasno_i_legalno

  11. Again some Romulan seeks revenge for his home-planet being destroyed in the future.

  12. WilliamDeeli表示:

    Здравствуйте!
    Мы изготавливаем дипломы.
    forextema.com/index.php?option=com_easyblog&view=entry&id=8914&Itemid=87

  13. This blog is definitely rather handy since I’m at the moment creating an internet floral website – although I am only starting out therefore it’s really fairly small, nothing like this site. Can link to a few of the posts here as they are quite. Thanks much. Zoey Olsen

  14. Easydrorbix表示:

    prozac indian pharmacy: viagra best online pharmacy – online pharmacy uk propecia

  15. Hello, Neat post. There’s a problem with your website in internet explorer, might check this… IE still is the marketplace chief and a large part of folks will miss your wonderful writing due to this problem.

  16. Drstobeese表示:

    viagra uk pharmacy online: online pharmacy atorvastatin – percocet pharmacy online no prescription

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

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

  19. After study a handful of the blog articles in your website now, we genuinely much like your means of blogging. I bookmarked it to my bookmark site list and are checking back soon. Pls check out my web site at the same time and figure out if you agree.

  20. Если вы искали где отремонтировать сломаную технику, обратите внимание – ремонт бытовой техники в челябинске

  21. I am glad that it turned out so well and I hope it will continue in the future because it is so interesting and meaningful to the community.

  22. Eanrpyd表示:

    Привет, друзья!
    Мы готовы предложить дипломы любой профессии по приятным ценам.
    forum.analysisclub.ru/index.php/topic,171620.0?PHPSESSID=be9d29ff90e59b2f12dbf03eb3ada3ec

  23. When I originally commented I clicked the -Notify me when new surveys are added- checkbox now if a comment is added I buy four emails using the same comment. Will there be by any means you are able to eliminate me from that service? Thanks!

  24. Cazroen表示:

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

  25. 888starzMt表示:

    Не забудьте ввести 888 starz bonus code для получения фрибетов.

  26. Easydrorbix表示:

    meijer pharmacy free atorvastatin: escrow pharmacy online – chloramphenicol eye drops pharmacy

  27. Thanks so much for giving everyone a very wonderful possiblity to read in detail from this website. It is often so good and as well , jam-packed with amusement for me and my office mates to visit your site at the least thrice per week to read the newest items you have got. Of course, I’m certainly fascinated considering the splendid tricks served by you. Certain two ideas in this article are undoubtedly the most suitable we have all had.

  28. I really pleased to find this internet site on bing, just what I was searching for : D likewise saved to my bookmarks .

  29. KingGame表示:

    An interesting discussion is definitely worth comment. I believe that you ought to publish more on this subject, it may not be a taboo subject but usually people don’t speak about such subjects. To the next! All the best.

發佈留言

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