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

  1. Double Glazing Near Me: The Good, The Bad, And The Ugly upvc double glazed windows

  2. I savour, result in I found just what I was taking a look for. You’ve ended my four day lengthy hunt! God Bless you man. Have a great day. Bye

  3. Useful information. Fortunate me I discovered your web site by chance, and I’m surprised why this twist of fate didn’t happened earlier! I bookmarked it.

  4. The 10 Most Scariest Things About Car Accident Lawyers best car wreck attorney (https://articlescad.com/)

  5. Ten 10kg Top Loader Washing Machines That Really Improve
    Your Life 10Kg top loader washing machines

  6. porsche keys表示:

    What Is The Heck Is Porsche Macan Key Replacement Cost? porsche keys

  7. Jfaktb表示:

    cotrimoxazole pills – bactrim order online tobramycin price

  8. What’s The Job Market For Integrated Fridge Frezer Professionals Like?
    integrated fridge frezer

  9. Comfortabl y, the post is really the freshest on this deserving topic. I harmonise with your conclusions and definitely will thirstily look forward to your next updates. Just saying thanks definitely will not simply just be adequate, for the extraordinary clarity in your writing. I can directly grab your rss feed to stay informed of any updates. Gratifying work and also much success in your business dealings!

  10. 10 Unexpected Automobile Locksmith Near Me Tips Locksmith for Cars

  11. aluminum curtains rods are much lighter than those steel rods that we previously used**

  12. I definitely did not realize that. Learnt something new nowadays! Thanks for that.

  13. Some really nice and utilitarian information on this web site , also I believe the style and design holds good features.

  14. 15 Things You Don’t Know About Citroen Remote Key Replacement Citroen C3 Key Replacement

  15. DichaelDax表示:

    Right here is the right web site for anyone who really wants to find out about this topic. You realize a whole lot its almost tough to argue with you (not that I actually will need to…HaHa). You certainly put a brand new spin on a subject that has been written about for many years. Wonderful stuff, just excellent!

    primerosauxilios.org/primeros-auxilios/que-es-y-como-curar-una-herida.phpВ 
    amisite.ru/phpBB2/memberlist.php?mode=joined&order=ASC&start=6850В 
    ezoinfo.ru/Narodnay_medizina/Saving_power/Saving_power_9.phpВ 
    clicknconnectclubs.com/index.php?do=/public/user/blogs/name_Alanpoe/page_7/В 
    efficiencydmi.com/blog-details.phpВ 

  16. The wedding will likely to be the most remarkable festivals that you saw. You are going to surely intend to make it magnificent as it can be. Out of your ensemble for your special flower bouquets to the wine beverages for top mankind’s destroyed, everthing really should with fabulous organize.

  17. This web-site is actually a walk-through you discover the knowledge you wished in regards to this and didn’t know who need to. Glimpse here, and you’ll certainly discover it.

  18. 10 Tell-Tale Signs You Need To Get A New Fiat Key Replacement Replacement Fiat 500X Keys Nottingham

  19. Vibrating Panty Sex Toy Tips That Can Change Your Life Vibrating panties orgasm

  20. 15 Facts Your Boss Wishes You Knew About Windows
    And Doors Birmingham wondow repair near Me

  21. 14 Questions You’re Uneasy To Ask Online Shop Wheat Work Boots

  22. Guide To Link Daftar Gotogel: The Intermediate
    Guide To Link Daftar Gotogel Link daftar gotogel

  23. heat pump表示:

    I’m impressed, I must say. Genuinely rarely should i encounter a blog that’s both educative and entertaining, and let me tell you, you may have hit the nail within the head. Your notion is outstanding; the thing is an issue that too little individuals are speaking intelligently about. I will be very happy which i came across this during my try to find some thing in regards to this.

  24. It’s difficult to find experienced people on this subject, but you seem like you know what you’re talking about! Thanks

  25. contact lens are not only for fashion but it can also protect your eyes from dust and UV radiation”

  26. Guide To Designer Handbags For Work: The Intermediate Guide The Steps To
    Designer Handbags For Work designer handbags for work

  27. Nice article. It does shed some light on the issue. By the for those interested in binary options can get an exclusive binary options bonus.

  28. Dessie表示:

    You’ll Never Guess This Sofa Couch For Sale’s Benefits sofa couch, Dessie,

  29. The Most Hilarious Complaints We’ve Seen About Double Glazed Windows Milton Keynes sash Window repair milton keynes

發佈留言

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