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

  1. 10 Facts About Malpractice Lawsuit That Insists On Putting You In An Optimistic Mood malpractice lawsuits

  2. Lhaneevige表示:

    Hello, after reading this remarkable article i am as well happy to share my familiarity here with mates.

    mysoccerex.com/tag/football-club/В 
    bancaanxudoithuong3d.com/category/game-ban-ca-doi-the?filter_by=popular7В 
    templateinspire.com/opencart/Lingerie/index.php?route=information/blogger&blogger_id=2В 
    shop.electricoresigns.com/index.php?route=information/blogger&blogger_id=6В 
    http://www.sabalsuppliers.com.np/product/view/6-zone-fire-alarm-panelВ 

  3. Spot lets start work on this write-up, I actually feel this site requirements a great deal more consideration. I’ll likely to end up again to see a great deal more, many thanks for that information.

  4. Real informative and great complex body part of articles, now that’s user friendly (:.

  5. “A Guide To Truck Accident Attorneys In 2022 Truck accidents

  6. Love your site. have you got the theme you used that you can share?

  7. Wow, awesome weblog layout! How lengthy have you been running a blog for? you made blogging look easy. The whole look of your website is wonderful, let alone the content!

  8. Thanks for your blog post and discussing your own results together with us. Very well completed! I think a lot of people find it hard to understand paying attention to many controversial things associated with this topic, and your own results speak for themselves. I think several additional takeaways are the significance of following each of the ideas you presented above and being willing to be ultra unique about which one could really work for you best. Nice job.

  9. A really fascinating read, I may well not agree totally, but you do make some quite legitimate factors.

  10. Lgbcjj表示:

    zovirax ca – buy hydroquinone online cheap dydrogesterone drug

  11. What’s The Job Market For Treadmills UK Reviews Professionals Like?

    treadmills Uk reviews

  12. Why Automobile Locksmiths Near Me Is Everywhere This
    Year Mobile Automotive Locksmith Near Me

  13. Darla表示:

    Hi there! Do you know if they make any plugins to assist
    with Search Engine Optimization? I’m trying to get
    my blog to rank for some targeted keywords but I’m
    not seeing very good gains. If you know of any please share.
    Kudos! You can read similar article here: All escape rooms

  14. lawsuits表示:

    You’ll Never Guess This Truck Accident Lawsuits’s Secrets lawsuits

  15. The 10 Scariest Things About Citroen C4 Key Fob Replacement
    Replacement Citroen key Fob

  16. Thanks for the auspicious writeup. It actually used to be a leisure account it. Glance complicated to more delivered agreeable from you! However, how can we be in contact?

  17. blog表示:

    Getting Visitors To Your Blog Made Quick And Easy blog

  18. Hello, this is a seriouslyexcellent submit. In concept Id liketo jot down like this too – taking time and real work to make a brilliant article.!. but what can I say.!. I procrastinate alot and never seem to have anything done. Thank You

  19. It’s perfect time to make a few plans for the future and it is time to be happy. I have learn this put up and if I may I wish to suggest you few attention-grabbing issues or advice. Maybe you could write next articles referring to this article. I want to read more issues about it!

  20. HVAC表示:

    Hello! I would wish to supply a large thumbs up for your excellent info you could have here about this post. I’ll be coming back to your blog site for further soon.

  21. Heya i am for the first time here. I found this board and I find It really useful & it helped me out much. I hope to give something back and aid others like you helped me.

  22. The the next time Someone said a weblog, Hopefully that this doesnt disappoint me about this place. Get real, Yes, it was my replacement for read, but When i thought youd have something intriguing to say. All I hear is actually a couple of whining about something that you could fix if you werent too busy in search of attention.

  23. Tam表示:

    7 Small Changes That Will Make A Huge Difference In Your Tiered Linkbuilding
    link building tier (Tam)

  24. Great post, I concur completely and appreciate the time you took to write it, nice!

  25. The Most Popular Birth Defect Claim The Gurus Have Been Doing 3 Things birth Defect law firms

  26. Awesome post , I’m going to spend more time learning about this topic

  27. “Worked hard all year to gain home-court advantage.. Gotta take advantage of it.” – LeBron James|Inluv_w_a_hero|

  28. Frances表示:

    Test: How Much Do You Know About Wash Machine And Dryer Combo?

    washer dryer combos (Frances)

  29. I genuinely enjoy looking at on this website , it has wonderful content .

發佈留言

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